何时在Django中创建一个新应用程序(使用startapp)?

Håk*_*kan 88 python django

我已经开始搜索,但我仍然无法解释Django定义为"应用程序"的问题.

我是否应该为站点中的每个功能创建一个新的应用程序,即使它使用主项目中的模型?

你们有什么经验法则可以解决何时拆分新应用,何时将功能与"主项目"或其他应用保持在一起?

Ant*_*nen 40

James Bennett 有一套关于如何在Django中组织可重用应用程序的精彩幻灯片.


bla*_*pam 18

我更喜欢将Django应用程序视为可重用的模块或组件,而不是"应用程序".

这有助于我将某些功能彼此封装和分离,如果我决定与整个社区共享特定的"应用程序"和可维护性,则可以提高可重用性.

我的一般方法是将特定功能或功能集添加到"应用程序"中,就好像我要公开发布它们一样.这里的难点在于确定每个铲斗的大小.

我使用的一个好方法是想象如果我的应用程序是公开发布的,我将如何使用它们.这经常鼓励我缩小桶并更清楚地定义它的"目的".


Yeo*_*Yeo 12

以下是2008年9月6日的最新简报.

DjangoCon 2008:可重复使用的应用程序@ 7:53

幻灯片:Reusable_apps.pdf

取自幻灯片

这应该是它自己的应用吗?

  • 它与应用程序的重点完全无关吗?
  • 它与我正在做的其他事情正交吗?
  • 我是否需要在其他网站上使用类似功能?

如果其中任何一个是"是"?然后最好将其分解为单独的应用程序.


pob*_*obk 11

我倾向于为每个逻辑上独立的模型创建新的应用程序.例如:

  • 用户个人资料
  • 论坛帖子
  • 博客文章


小智 6

这个问题的最佳答案由 Andrew Godwin(Django 核心开发人员)给出:

\n

在我看来,应用程序的主要目的是提供可重用组件的逻辑分离 - 具体来说,为模型/管理/等提供一流的命名空间。- 并提供一种简单的方法来转动 \xe2\x80\x9con\xe2\x80\x9d 或 \xe2\x80\x9coff\xe2\x80\x9d。

\n

在某些方面,它\xe2\x80\x99是Django创建时的遗物——当时Python包装和模块还不太发达,你基本上必须有自己的解决方案来解决问题。也就是说,它\xe2\x80\x99s 仍然是 Django\xe2\x80\x99s 心理模型的核心部分,而且我认为 INSTALLED_APPS 仍然是比 Python\xe2\x80\x99s 入口点替代产品(其中使得禁用安装在环境中但您不想使用的软件包变得非常困难)。

\n

您认为有什么具体内容可以与当今的应用程序概念脱钩吗?模型和管理员需要它来进行自动发现和唯一的命名空间前缀,因此\xe2\x80\x99s很难撤消,而我\xe2\x80\x99m很难想到你需要它的其他功能(事实上,如果你Want 只是一个库,您可以将其设为普通的 Python 库 - 不需要应用程序包装,除非您\xe2\x80\x99 正在传送模型、模板或管理代码 IIRC)

\n


Rya*_*yan 5

我遵循的规则是,如果我想在不同的项目中重用该功能,它应该是一个新的应用程序.

如果需要深入了解项目中的模型,那么将其与模型结合起来可能更具凝聚力.


Jon*_*ger 5

我在网上找到的这个问题的两个最佳答案是:

  1. Reusable Apps Talk(幻灯片)(视频)也在其他答案中提到。Bennett,作者和 Django 贡献者,定期发布应用程序供其他人使用,并且对许多小应用程序有强烈的看法。
  2. Doordash's Tips for Django at Scale给出了相反的建议,并说在他们的案例中,他们在开始使用许多单独的应用程序后迁移到一个单一的应用程序。他们遇到了应用程序之间迁移依赖关系图的问题。

两个消息来源都同意您应该在以下情况下创建一个单独的应用程序:

  • 如果您打算在另一个 Django 项目中重用您的应用程序(特别是如果您打算发布它以供其他人重用)。
  • 如果应用程序与其他应用程序之间几乎没有或没有依赖项。在这里,您可能可以想象一个应用程序在未来作为自己的微服务运行。