- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
背景: 我有 5 个独立的 Django 项目,我试图将它们组合成 1 个由多个应用程序组成的 Django 项目。换句话说:projA 有 appA,projB 有 appB,projC 有 appC,等等。我想要 1 个有 appA、appB 和 appC 的 masterProj。
目前每个应用程序都连接到它自己的独立数据库(应用程序不共享数据)。每个项目都使用 Django 用户身份验证、Django 注册、taggit、配置文件、评论和 sorl-thumbnail。
我正在使用 Django 1.4 并设置 database routing according to this stackoverflow answer这样,一旦合并到一个项目中,新合并的 Django 项目中的每个应用程序仍然能够连接到自己的数据库。一切顺利,但我开始遇到用户身份验证和 taggit 等问题:
1) 如前所述,每个应用程序都连接到不同的数据库,并且每个数据库都有一个名为“auth_user”的表。但是,我发现所有对 auth_user 表的读/写调用(无论哪个应用程序进行读/写调用)都被路由到默认数据库(在本例中为 appA 的数据库):
# settings.py:
DATABASES['default'] = DATABASES['appA']
DATABASE_ROUTERS = ['appA.db.DBRouter', 'appB.db.DBRouter', 'appC.db.DBRouter']
# appA/dbrouterA.py (appB, appC routers are identical this, replacing 'appA' with 'appB', etc.)
class DBRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
2) 假设我让路由正常工作,如果用户登录到 appA,我不希望他们登录到 appB。我看到很多人发布相反的问题(他们希望他们的应用程序共享用户凭据)但是有没有人在同一个项目的几个独立应用程序中成功使用 Django 用户身份验证?如果是这样,您是怎么做到的?
3) 我从我的 taggit 代码中得到以下错误,但我一直无法弄清楚如何将“related_name”参数传递给 taggit。我正在使用 taggit 的基本实现——没有继承任何东西:
# appA/models.py
tags = TaggableManager(blank=True)
# appB/models.py
tags = TaggableManager(blank=True)
错误:
appA.userprofile: Accessor for m2m field 'tagged_items' clashes with related m2m field 'TaggedItem.userprofile_set'. Add a related_name argument to the definition for 'tagged_items'.
appB.userprofile: Accessor for m2m field 'tagged_items' clashes with related m2m field 'TaggedItem.userprofile_set'. Add a related_name argument to the definition for 'tagged_items'.
4) 我开始觉得结合所有这些应用程序是一个滑坡;稍后我可能会遇到 sorl-thumbnail 或尚未出现的评论的问题。有没有人成功地将应用程序组合到一个项目中?还是我想做一些 Django 根本不支持的事情?
在此先感谢您的帮助!
最佳答案
Django 的体系结构旨在围绕一个 Django 项目和多个 Django 应用程序。项目本身只不过是您的设置和主要 URL 配置模块,而应用程序是遵循一些文件约定的简单包。
现在,应用程序本身永远不会耦合到特定项目(不过,它们可以通过引用它们来耦合到其他应用程序)。这个想法是让您保留设计项目源代码结构的自由,并且对于大多数 Django 项目来说常见的一种方法是在项目的顶级包下分发 Django 应用程序,就像大多数 Python 应用程序一样。这种方法可以方便地全面了解项目提供的所有功能(当您应用有意义的应用程序标签时),创建命名空间并为开发人员提供方便且有组织的访问特定项目源的路径。
这既适用于大型项目,也适用于您想要并置和合并多个重复使用类似设计和方法的不同项目时。虽然这只会影响项目的结构,但选择是为单个 Django 项目配置还是为固定的 Django 应用程序集配置多个 Django 项目会产生一些重要影响。
当您创建一个 Django 项目时,您基本上是将 Django 应用程序插入到框架的检测中并公开应用程序行为,正如我们在 Web 应用程序中所理解的那样,通过配置和包含 Django 应用程序的 URL 和 View 的映射模式。
关键是您可以以任何适合您的方式重新组织资源。您的包裹可以像 proj.appA
这样组织, proj.appB
等或proj.common1
, proj.common2
, proj.projA.app1
, proj.projA.app2
, proj.projB.app1
,这真的取决于你。
您应该知道的是,您不需要单一的设置和 URL 模块并求助于数据库路由和管理数据库连接,您也可以为每个项目设置一个设置和 URL 模块,引用不同的应用程序和暴露不同的行为。通过每个项目的数据库设置,您已经重用代码并同时保持每个项目的数据库数据和状态不同。
关于python - 在单个项目中为多个应用程序使用 django 用户身份验证和 taggit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745839/
我正在使用 NetBeans 开发 Java 中的 WebService,并使用 gradle 作为依赖管理。 我找到了this article关于使用 gradle 开发 Web 项目。它使用 Gr
我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到
我已经为这个错误苦苦挣扎了很长时间。如果有帮助的话,我会提供一些问题的快照。请指导我该怎么办????在我看来,它看起来一团糟。 *** glibc detected *** /home/shivam/
我在 Ubuntu 12.10 上运行 NetBeans 7.3。我正在学习 Java Web 开发类(class),因此我有一个名为 jsage8 的项目,其中包含我为该类(class)所做的工作。
我想知道 Codeplex、GitHub 等中是否有任何突出的项目是 C# 和 ASP.NET,甚至只是 C# API 与功能测试 (NUnit) 和模拟(RhinoMocks、NMock 等)。 重
我创建了一个 Maven 项目,包装类型为“jar”,名为“Y”我已经完成了“Maven 安装”,并且可以在我的本地存储库中找到它.. 然后,我创建了另一个项目,包装类型为“war”,称为“X”。在这
我一直在关注the instructions用于将 facebook SDK 集成到我的应用程序中。除了“helloFacebookSample”之外,我已经成功地编译并运行了所有给定的示例应用程序。
我想知道,为什么我们(Java 社区)需要 Apache Harmony 项目,而已经有了 OpenJDK 项目。两者不是都是在开源许可下发布的吗? 最佳答案 事实恰恰相反。 Harmony 的成立是
我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾) 问题是我让它在
我无法构建 gradle 项目,即使我编辑 gradle 属性,我也会收到以下错误: Error:(22, 1) A problem occurred evaluating root project
我有这个代码: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" 如何在 NToDel:NSArray 中添加 addInN
如何在单击显示更多(按钮)后将主题列表限制为 5 个(项目)。 还有 3(项目),依此类推到列表末尾,然后它会显示显示更少(按钮)。 例如:在 Udemy 过滤器选项中,当您点击查看更多按钮时,它仅显
如何将现有的 Flutter 项目导入为 gradle 项目? “导入项目”向导要求 Gradle 主路径。 我有 gradle,安装在我的系统中。但是这里需要设置什么(哪条路径)。 这是我正在尝试的
我有一个关于 Bitbucket 的项目。只有源被提交。为了将项目检索到新机器上,我在 IntelliJ 中使用了 Version Control > Checkout from Ve
所以,我想更改我公司的一个项目,以使用一些与 IDE 无关的设置。我在使用 Tomcat 设置 Java 应用程序方面有非常少的经验(我几乎不记得它是如何工作的)。 因此,为了帮助制作独立于 IDE
我有 2 个独立的项目,一个在 Cocos2dx v3.6 中,一个在 Swift 中。我想从 Swift 项目开始游戏。我该怎么做? 我已经将整个 cocos2dx 项目复制到我的 Swift 项目
Cordova 绝对是新手。这些是我完成的步骤: checkout 现有项目 运行cordova build ios 以上生成此构建错误: (node:10242) UnhandledPromiseR
我正在使用 JQuery 隐藏/显示 li。我的要求是,当我点击任何 li 时,它应该显示但隐藏所有其他 li 项目。当我将鼠标悬停在文本上时 'show all list item but don
我想将我所有的java 项目(223 个项目)迁移到gradle 项目。我正在使用由 SpringSource STS 团队开发的 Gradle Eclipse 插件。 目前,我所有的 java 项目
我下载this Eclipse Luna ,对于 Java EE 开发人员,如描述中所见,它支持 Web 应用程序。我找不到 file -> new -> other -> web projects
我是一名优秀的程序员,十分优秀!