我刚开始学习Django,有些困惑如何最好地布局和组织项目和应用程序。据我所知,项目是您的整个站点,而应用程序是构成该站点的部分?
对于第一个项目,我正在制作一个小型的电子商务类型的网站,其中将包括用户、商品等...那么我应该有“用户”和“商品”应用程序吗?那么像用户注册/登录、商品标签、商品评论这样的小部分呢?用户认证、标记和评论是否也应该是单独的应用程序?
基本上,我在理解应用程序的概念以及在保持一切可管理和DRY的同时何时将不同用例分开为单独的应用程序方面遇到了麻烦。
我刚开始学习Django,有些困惑如何最好地布局和组织项目和应用程序。据我所知,项目是您的整个站点,而应用程序是构成该站点的部分?
对于第一个项目,我正在制作一个小型的电子商务类型的网站,其中将包括用户、商品等...那么我应该有“用户”和“商品”应用程序吗?那么像用户注册/登录、商品标签、商品评论这样的小部分呢?用户认证、标记和评论是否也应该是单独的应用程序?
基本上,我在理解应用程序的概念以及在保持一切可管理和DRY的同时何时将不同用例分开为单独的应用程序方面遇到了麻烦。
Ignacio指出你提到的一些应用已经存在。您还应该查看Pinax之类的项目,以获取其他可插入应用程序,这些应用程序可以成为自己项目的起点。
现在回到您的问题:Django项目是Django应用程序的集合-您已经理解了这一点。 Django书籍 更好地定义了它:
"项目是Django实例的设置集合,包括数据库配置、Django特定选项和应用程序特定设置。"
Django书籍将Django应用程序 定义为:
"Django代码捆绑包,包括模型和视图,它们在一个Python软件包中共存,并表示完整的Django应用程序。"
但在最近与Jacob Kaplan-Moss 上课时,我理解(注意,我不是说他说了什么!!!) Django应用程序主要是封装常见的、明确定义的行为 。我也明白有很多小的应用程序是可以的——比拥有一个做所有事情的大应用程序更好——一些应用程序仅提供模板、一些仅提供模型,一些提供完整的模板、模型和视图。
我们公司的内部面向应用程序大多具有常见可插入应用程序,这些可插入应用程序由模板、CSS、JavaScript等组成,将项目与共同的外观和感觉联系在一起。我在该插件应用程序中没有视图或模型。
我有一个可插拔的应用程序,也是内部开发的,其中包含了一堆模型,这些模型被多个项目共享。这些模型代表了常见的数据库表,被几个不同的应用程序使用,如果在每个应用程序中都复制一份,就会违反DRY原则(不要重复自己)。
以下是一些良好的应用程序示例:
以上所有应用程序都解决了一个逻辑问题。它们不试图成为一个万能解决方案...... Gravatar应用程序不提供OpenID支持(有另一个应用程序提供),我的帮助台内部应用程序不提供认证(它使用默认的django应用程序进行认证)。
一个坏的Django应用程序的例子是实现了认证、OpenID支持、帮助台和项目跟踪。为什么这样做是错的?因为现在如果你想重用你的认证应用程序,你必须从你的万能应用程序中提取一些模型、视图、模板。如果你决定OpenId支持是你下一个项目的必需品,你将不得不翻看这个庞然大物的代码,找出哪些部分是相关的。
一个好的Django应用程序提供了一个逻辑操作集,并且做得很好。