关于python:大型Django项目的项目设计/ FS布局

关于python:大型Django项目的项目设计/ FS布局

Project design / FS layout for large django projects

布置大型Django项目的最佳方法是什么? 这些教程提供了有关设置应用程序,模型和视图的简单说明,但有关如何细分应用程序和项目,在典型项目中的应用程序之间允许/需要多少共享的信息较少(显然,这在很大程度上取决于 项目)以及如何/在何处保存常规模板。

是否有人提供示例,建议和解释,说明为什么某个项目布局比另一个项目布局更好? 我对合并大量的单元测试(实际代码库大小的2-5倍)和字符串外部化/模板特别感兴趣。


主要准则与任何其他大型代码项目相似。应用程序应满足一个明确定义的责任。名称"应用程序"用词不当;应该将Django应用程序更多地视为可重用的组件,可以将其插入在一起以创建真实的应用程序。每个应用程序的测试都应包含在该应用程序中。应用程序应尽可能彼此分离,但显然会有依赖关系,因此目标应是使依赖关系图尽可能简单和合理。

我更喜欢将项目的所有模板都保留在单个项目范围的模板目录下,每个应用程序都有一个子目录(在Django中,每个应用程序都使用模板子目录是非常严格的约定,因为它避免了应用程序之间的模板名称冲突) 。一个项目范围的模板目录的原因是模板,模板继承树和块名称可能是特定于项目的,因此很难提供可以插入任何项目的"默认"应用程序模板。我们已经尝试过为基础站点范围的模板及其定义的块确定标准的命名约定,但是我还没有看到一个标准出现(它们在Pinax上完成工作的方式可能是我们最接近于标准)。

关于"字符串外部化",如果您的意思是i18n和l10n,则Django对放置.po文件的位置和标准位置具有强大的支持-请检查文档。


我发现Zachary的布局非常有用
Zachary Voase的Blog?再谈Django项目惯例。


此页面很好地解决了我的一些问题:http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/

特别:

  • To define custom template tags or filters, you must create a sub-directory in the application’s directory called templatetags, and it must contain a file named __init__.py so that it can be imported as a Python module.
  • To define unit tests which will automatically be noticed by Django’s testing framework, put them in a module called tests (which can be either a file named tests.py or a directory called tests). The testing framework will also find any doctests in that module, but the preferred place for those is, of course, the docstrings of the classes or functions they’re designed to test.
  • To provide custom SQL which will be executed immediately after your application is installed, create a sub-directory called sql inside the application’s directory; the file names should be the same as the names of the models whose tables they’ll operate on; for example, if you have an app named weblog containing a model named Entry, then the file sql/entry.sql inside the app’s directory can be used to modify or insert data into the entries table as soon as it’s been created.
  • 关于tests.py和tests(目录)的注释也适用于模型,这有助于解决一个文件可以使用多个测试(或模型)的问题。

    我仍然希望看到一些示例/针对应用程序/项目的建议,以及大型Django网站都可以正常运行。


    Pinax项目是围绕小型可重复使用的应用程序的想法构建的,这些应用程序很容易集成到项目中。他们已将Cloud 27项目用作演示项目。

    我正在研究的Django项目(称为Basie。它是0.1之前的版本,因此尚无链接。)正在尝试遵循Pinax模型,到目前为止,它的运行情况还不错。


    我真的很喜欢Randall Degges关于这个主题的文章。他没有提供有关如何将设置文件粘合在一起的信息,但是我将发表一篇文章,我将能够链接该文章,但是现在任何人都可以签出我的repo,其中我在自述文件中提供了一些指导。


    我当前的布局源于我希望对网站进行测试版。这意味着每个站点都有两个项目,因为它们需要不同的配置,这迫使我将所有应用程序移出项目。

    我创建了两个文件夹:$ APP_ROOT / devel和$ APP_ROOT / prod。这些包含所有应用程序。使用源代码控制(在我的情况下为git),在HEAD修订版中开发了应用程序,而prod中的应用程序锁定在PROD标签上。模板也有自己的文件夹,其布局与应用程序相同。

    现在,我可以在devel-apps文件夹和匹配的模板文件夹中进行所有开发。当我有满意的事情时,我会标记该修订并更新产品。


    推荐阅读