何时在Django中创建新应用(使用startapp)?


102

我已经为此进行了搜索,但是在Django定义为“应用程序”方面仍然遇到麻烦。

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

你们对何时拆分新应用程序以及何时将功能与“主项目”或其他应用程序保持在一起有很好的经验法则吗?

Answers:


43

詹姆斯·本内特(James Bennett)提供了一系列精彩的幻灯片,介绍了如何在Django中组织可重复使用的应用程序。


1
这是否意味着,如果我创建子模型,则必须始终在同一应用程序中?由于我不能轻易地将其放到另一个项目中而不带来两个“应用程序”
Lionel

18

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

这有助于我将某些功能相互封装和解耦,如果我决定与整个社区共享特定的“应用”,则可以提高可重用性,并具有可维护性。

我的一般方法是将特定功能或功能集存储到“应用程序”中,就像我要公开发布它们一样。这里最困难的部分是弄清楚每个存储桶有多大。

我使用的一个好技巧是想象如果我的应用程序公开发布后将如何使用。这通常鼓励我缩水缩水,更清楚地定义其“目的”。


16

这是2008年9月6日更新的演示文稿。

DjangoCon 2008:可重用应用@ 7:53

幻灯片:Reusable_apps.pdf

取自幻灯片

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

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

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


我看到的幻灯片没有包含有关“应用程序焦点”的第一个问题。
约翰尼

@johnny它位于99的幻灯片31。–
Yeo

13

我倾向于为每个逻辑上分离的模型集创建新的应用程序。例如:

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

6

我遵循的规则是,如果我想在其他项目中重用该功能,则它应该是一个新应用。

如果需要对项目中的模型有深入的了解,则将其与模型结合在一起可能会更有凝聚力。


4

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

  1. 其他答案中也提到了可重复使用的应用程序对话(幻灯片)(视频)。Bennett是Django的作者和撰稿人,他定期发布供他人使用的应用程序,并对许多小型应用程序有很强的见解。
  2. Doordash的《面向Django的技巧》给出了相反的建议,并表示在从许多单独的应用程序开始后,他们迁移到了一个应用程序。他们在应用之间的迁移依赖关系图中遇到了问题。

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

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

1

一个“应用程序”可能有很多不同的东西,这一切真的都让人联想到。例如,假设您正在构建博客。您的应用程序可以是整个博客,也可以有一个“管理员”应用程序,一个用于所有公共视图的“站点”应用程序,一个“ rss”应用程序,一个“服务”应用程序,以便开发人员可以在其博客中与该博客进行交互自己的方式等

我个人将使博客本身成为该应用程序,并扩展其中的功能。然后可以很轻松地在其他网站中重复使用该博客。

Django的优点在于,它将目录树中任何级别的所有models.py文件都识别为包含Django模型的文件。因此,将功能分解为“应用程序”本身中较小的“子应用程序”不会带来任何困难。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.