Django和项目/应用组织

Django和项目/应用组织,django,Django,我刚刚开始学习Django,对如何规划和组织项目和应用程序的最佳方式有点困惑。从我的理解来看,一个项目就是你的整个站点,而应用程序就是组成该站点的各个部分 对于第一个项目,我正在做一个小的电子商务类型的网站,将有用户,项目等。。。那么我应该有“用户”和“项目”应用程序吗?与用户注册/登录、项目标签、项目注释等相关的较小部分如何?用户身份验证、标记和注释也应该是独立的应用程序吗 基本上,我很难理解应用程序是什么,以及何时将不同的用例划分为不同的应用程序,同时保持所有内容的可管理性和干爽性。Igna

我刚刚开始学习Django,对如何规划和组织项目和应用程序的最佳方式有点困惑。从我的理解来看,一个项目就是你的整个站点,而应用程序就是组成该站点的各个部分

对于第一个项目,我正在做一个小的电子商务类型的网站,将有用户,项目等。。。那么我应该有“用户”和“项目”应用程序吗?与用户注册/登录、项目标签、项目注释等相关的较小部分如何?用户身份验证、标记和注释也应该是独立的应用程序吗


基本上,我很难理解应用程序是什么,以及何时将不同的用例划分为不同的应用程序,同时保持所有内容的可管理性和干爽性。Ignacio正确地指出,您提到的一些应用程序已经存在。您还应该查看其他可插拔应用程序之类的项目,它们可以作为您自己项目的起点

现在谈谈你的问题:Django项目是Django应用程序的集合——这部分你做对了。《公约》对其作了更好的定义:

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

as:

Django代码包,包括模型和视图,共同存在于一个Python包中,表示完整的Django应用程序

但在最近的一节课上,我明白了(请注意,我并不是说他说的!!!)Django应用程序是关于封装常见的定义良好的行为的。我还了解到,拥有许多小型应用程序是可以的,这比拥有一个单一的应用程序做所有事情要好,而且有些应用程序只是提供模板,有些只是模型,有些是模板、模型和视图的完整集合

我的大多数项目——这是我们公司面向内部的应用程序——都有一个内部开发的通用可插拔应用程序,它几乎是模板、css、javascript等的集合;以共同的外观和感觉将项目联系在一起。我在那个可插拔的应用程序中没有视图或模型

我有一个可插拔的应用程序,也是内部开发的,它包含了一系列模型,这些模型在多个项目之间共享。这些模型表示多个不同应用程序使用的公共数据库表,如果在每个应用程序中都复制这些表,则效果会更好

一些应用程序的好例子:

  • 身份验证(Django已经有了一个标准的身份验证应用程序)
  • gravatar支持(Pinax有)
  • 标记(多个选项可用,Pinax有一个)
  • 帮助台(我们内部开发了一个)
所有这些都在解决一个逻辑问题。他们不想成为一个无所不能的解决方案。。。Gravatar应用程序不提供OpenID支持(OpenID还有另一个应用程序),我的帮助台内部应用程序不提供身份验证(它使用默认的django应用程序)

Django应用程序的一个坏例子是实现身份验证、openid支持、帮助台和项目跟踪。为什么那会很糟糕?因为现在如果你想重新使用你的认证应用程序,你必须从你无所不包的应用程序中提取一些模型,一些视图,一些模板。如果你决定OpenId支持是你下一个项目的必要条件,那么你必须仔细阅读这个庞大的应用程序的代码,找出哪些部分是相关的


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

用户身份验证、标记和评论在Django中已经是独立的应用程序。当您等待更权威的答案时,您可能有兴趣浏览Satchmo()的源代码,这是一个基于Django的网店。虽然我还没有进行过源代码挖掘,但它至少与您的项目在同一个领域。还值得一看Everyblock的源代码(),因为它部分是由Django的共同创建者Adrian Holovay编写的。了解工具周围的习惯用法没有什么比观察其创建者如何使用工具更好的方法了。