Django和项目/应用程序组织

13

我刚开始学习Django,有些困惑如何最好地布局和组织项目和应用程序。据我所知,项目是您的整个站点,而应用程序是构成该站点的部分?

对于第一个项目,我正在制作一个小型的电子商务类型的网站,其中将包括用户、商品等...那么我应该有“用户”和“商品”应用程序吗?那么像用户注册/登录、商品标签、商品评论这样的小部分呢?用户认证、标记和评论是否也应该是单独的应用程序?

基本上,我在理解应用程序的概念以及在保持一切可管理和DRY的同时何时将不同用例分开为单独的应用程序方面遇到了麻烦。


2
用户认证、标记和评论已经是 Django 中的独立应用程序。 - Ignacio Vazquez-Abrams
1
在等待更权威的答案时,您可能会对浏览基于Django的网店Satchmo(http://www.satchmoproject.com/)的源代码感兴趣。虽然我没有深入研究过源代码,但它至少与您的项目处于同一领域。此外,值得一看的是Everyblock的源代码(http://code.google.com/p/ebcode/),因为它部分由Django的共同创始人Adrian Holovaty编写。了解工具周围的习语的几种更好的方法之一就是查看其创建者如何使用它们。 - Callahad
1个回答

20

Ignacio指出你提到的一些应用已经存在。您还应该查看Pinax之类的项目,以获取其他可插入应用程序,这些应用程序可以成为自己项目的起点。

现在回到您的问题:Django项目是Django应用程序的集合-您已经理解了这一点。 Django书籍 更好地定义了它:

"项目是Django实例的设置集合,包括数据库配置、Django特定选项和应用程序特定设置。"

Django书籍将Django应用程序 定义为:

"Django代码捆绑包,包括模型和视图,它们在一个Python软件包中共存,并表示完整的Django应用程序。"

但在最近与Jacob Kaplan-Moss 上课时,我理解(注意,我不是说他说了什么!!!) Django应用程序主要是封装常见的、明确定义的行为 。我也明白有很多小的应用程序是可以的——比拥有一个做所有事情的大应用程序更好——一些应用程序仅提供模板、一些仅提供模型,一些提供完整的模板、模型和视图。

我们公司的内部面向应用程序大多具有常见可插入应用程序,这些可插入应用程序由模板、CSS、JavaScript等组成,将项目与共同的外观和感觉联系在一起。我在该插件应用程序中没有视图或模型。

我有一个可插拔的应用程序,也是内部开发的,其中包含了一堆模型,这些模型被多个项目共享。这些模型代表了常见的数据库表,被几个不同的应用程序使用,如果在每个应用程序中都复制一份,就会违反DRY原则(不要重复自己)。

以下是一些良好的应用程序示例:

  • 认证(Django已经有一个标准的认证应用程序)
  • Gravatar支持(Pinax已经有了)
  • 标记(有几个选项可用,Pinax有一个)
  • 帮助台(我们内部开发了一个)

以上所有应用程序都解决了一个逻辑问题。它们不试图成为一个万能解决方案...... Gravatar应用程序不提供OpenID支持(有另一个应用程序提供),我的帮助台内部应用程序不提供认证(它使用默认的django应用程序进行认证)。

一个坏的Django应用程序的例子是实现了认证、OpenID支持、帮助台和项目跟踪。为什么这样做是错的?因为现在如果你想重用你的认证应用程序,你必须从你的万能应用程序中提取一些模型、视图、模板。如果你决定OpenId支持是你下一个项目的必需品,你将不得不翻看这个庞然大物的代码,找出哪些部分是相关的。

一个好的Django应用程序提供了一个逻辑操作集,并且做得很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接