代码之家  ›  专栏  ›  技术社区  ›  roflwaffle

Django和项目/应用组织

  •  11
  • roflwaffle  · 技术社区  · 14 年前

    我刚刚开始学习django,对于如何规划和组织项目和应用程序的最佳方式有点困惑。据我所知,一个项目是你的网站作为一个整体,应用程序是组成该网站的部分?

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

    基本上,我在理解什么是应用程序以及什么时候将不同的用例分离成不同的应用程序的概念上遇到了困难,同时保持了所有东西的可管理性和干爽性。

    1 回复  |  直到 14 年前
        1
  •  18
  •   cethegeek    14 年前

    ignacio正确地指出,您提到的一些应用程序已经存在。你也应该看看像 Pinax 对于其他可插拔的应用程序,可以作为您自己项目的起点。

    现在来问你一个问题:django项目是django应用程序的集合——你说得对。这个 Django book 更好的定义:

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

    这个 django book defines a Django app AS:

    一组Django代码,包括模型和视图,它们一起存在于一个Python包中,代表一个完整的Django应用程序。

    但在最近的一节课上 Jacob Kaplan-Moss 我明白了(注意,我不是说那是他说的!!!!)那个 django应用程序的全部功能是封装常见的定义良好的行为 . 我也明白 有很多小程序是可以的 -总比拥有一个无所不能的单一应用要好——有些应用只是提供模板,有些只是模型,有些是模板、模型和视图的完整集合。

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

    我有一个可插拔的应用程序,也是内部开发的,它包含了在多个项目之间共享的一堆模型。这些模型表示几个不同的应用程序使用的公共数据库表,在每个应用程序中复制它们将 violate DRY .

    一些应用程序的好例子:

    • 身份验证(Django已经有一个标准的身份验证应用程序)
    • Gravatar支持(Pinax有)
    • 标记(有几个选项,pinax有一个)
    • 服务台(我们内部开发了一个)

    以上这些都是解决一个逻辑问题。他们不想成为一个无所不能的解决方案…Gravatar应用程序不提供OpenID支持(还有一个用于OpenID的应用程序),而我的帮助台内部应用程序不提供身份验证(它使用默认的Django应用程序)。

    django应用程序的一个坏例子是实现身份验证、openid支持、帮助台和项目跟踪的应用程序。为什么会很糟?因为现在如果你想重用你的认证应用,你必须从你的全方位应用中提取一些模型,一些视图,一些模板。如果你认为openid支持是你下一个项目必须的,你就必须仔细检查这个庞大应用程序的代码,找出哪些部分是相关的。

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