一尘不染

大型Django应用程序布局

python

我正在一个团队中开发基于Web的大学门户,该门户将基于Django。我们仍处于探索阶段,我正在尝试寻找布局项目/开发环境的最佳方法。

我最初的想法是将系统开发为Django“应用程序”,其中包含子应用程序以分隔出系统的不同部分。我打算制作这些“子”应用程序的原因是,它们在父应用程序之外不会有任何用途,因此单独分发它们毫无意义。我们设想将门户安装在多个位置(例如,在不同的大学中),以便可以将主应用程序放入多个Django项目中进行安装。因此,对于每个位置的项目,我们都有一个不同的存储库,它实际上只是一个settings.py文件,用于定义已安装的门户应用程序,并将urls.pyURL路由到该文件。

我已经开始写一些初始代码,但是遇到了一个问题。处理用户身份验证和配置文件的某些代码似乎没有家。它在概念上不属于门户应用程序,因为它与门户的功能无关。但是,它也不能进入项目存储库-
因为我将在每个位置的存储库上复制代码。例如,如果随后在此代码中发现错误,则必须手动在所有位置的项目文件中复制此修复程序。

我的修复想法是使所有项目库都成为“主”位置项目的分支,以便我可以从该主项目中提取所有更改。我认为这很麻烦,这意味着我还有一个存储库可以照顾。

我正在寻找实现此项目的更好方法。谁能推荐一个解决方案或我可以看的类似示例?问题似乎是我正在开发Django 项目, 而不仅仅是Django 应用程序


阅读 341

收藏
2021-01-20

共1个答案

一尘不染

我发现最好的方法是创建应用程序,然后创建一个将它们粘合在一起的项目。我的大多数项目都有类似的应用程序,每个应用程序都包含这些应用程序。电子邮件,注释,操作提醒,用户身份验证等。我的首选布局如下:

  • 项目/
    • settings.py
    • urls.py
    • views.py
  • 应用/
    • 电子邮件/
    • urls.py
    • views.py
    • 笔记/
    • urls.py
    • views.py

应用:

每个“应用程序”都独立存在,除了以外settings.py,它们都不依赖项目本身(尽管它可以依赖其他应用程序)。应用程序之一是用户身份验证和管理。它具有用于完成其任务的所有URL
apps/auth/urls.py。它的所有模板都在中apps/auth/templates/auth/。它的所有功能都是独立的,因此当我需要进行调整时,我知道该去哪里。

项目:

project/包含了所有的胶水需要把这些单独的应用程序一起进入决赛的项目。就我而言,我大量使用settings.INSTALLED_APPSinproject/来识别应用程序中哪些视图可供我使用。这样一来,如果我apps.notes退出,即使INSTALLED_APPS没有任何提示,一切仍然可以正常运行。

保养:

这种布局/方法/计划也具有长期的积极影响。您以后可以重用任何应用程序,而几乎无需进行任何工作。您可以从下至上对系统进行测试,确保每个应用程序在集成到整个应用程序之前都能按预期工作,从而帮助您更快地查找/修复错误。您可以实现一项新功能,而无需将其推广到应用程序的现有实例(如果它不在中INSTALLED_APPS,则他们将看不到它)。

我敢肯定,有更好的文档记录方式来布置项目,以及使用更广泛的方式,但这是迄今为止对我最有效的一种方式。

2021-01-20