使用默认的Django包作为应用程序是否正确?
使用默认的Django包作为应用程序是否正确?
我准备使用Django构建一个相当复杂的“产品”。在这个上下文中,我将避免使用“项目”和“应用程序”这些术语,因为我不清楚它们在Django中的具体含义。
项目可以有多个应用程序。应用程序可以在多个项目之间共享。很好。
我不是在重新发明博客或论坛-我认为我的产品没有任何部分可以在任何环境中重复使用。直观地说,我会称之为一个“应用程序”。那么,我是不是应该在一个“app”文件夹中完成所有工作?
如果是这样...在Django的project.app
命名空间中,我倾向于使用myproduct.myproduct
,但当然这是不允许的(但我正在构建的应用程序是我的项目,我的项目是一个应用程序!)。因此,我认为也许我应该通过为每个“重要”模型构建一个应用程序来处理Django,但是我不知道在我的架构中如何划分边界来将其分成应用程序-我有很多具有相对复杂关系的模型。
我希望有一个常见的解决方案...
使用默认的Django包作为应用程序是否正确?
这个问题的出现的原因是:
- 默认情况下,Django的设置不鼓励将默认包用作应用程序,而是鼓励创建一个独立的应用程序目录。
- 使用相同的名称来命名项目和其中的应用程序会导致manage.py
无法正确导入项目设置。
解决方法是:
- 遵循Django的约定,将应用程序放在独立的应用程序目录中。
- 如果需要创建可重用的功能模块,可以创建一个顶级应用程序,其中包含widgets.py
,fields.py
,context_processors.py
等。
- 如果创建一个通用的博客格式,在一个应用程序中包装它,并配置一个Django项目的实例来使用该应用程序的内容。
- 如果有需要自己开发的功能,可以创建一个独立的目录来存放该功能,以便可以轻松地将其删除。
总之,使用独立的应用程序目录是符合Django约定的做法,这有助于其他人与项目一起工作。同时,遵循约定也有助于提高代码的可读性和维护性。
在使用startproject
和startapp
之后,没有任何限制阻止我们将"project"和"app"组合在同一个Python包中。项目实际上只是一个settings
模块,而应用实际上只是一个models
模块,其他都是可选的。
对于小型网站,有以下结构是完全合理的:
site/ models.py settings.py tests.py urls.py views.py
+1 总结:项目有settings.py,应用有models.py。它们是相同级别的结构。我曾经认为项目比应用高一个级别,看来我错了。
,在设置中应该包含哪些内容(作为应用程序),以使'python manage.py makemigrations'或'python manage.py migrate'能够查看'my product'目录中的'models.py'文件?
我意识到我回答得很晚,但我自己也遇到了类似的情况,我一直在看很多答案。为了回答你的问题,你只需要将你的项目包含在INSTALLED_APPS
列表中。下面是一个例子:stackoverflow.com/a/59739912/399435
,谢谢。。 🙂 很高兴看到四年后评论得到了回答。。干杯
这是一个关于使用默认Django包作为应用程序是否正确的问题。这个问题的出现是因为在使用Django开发应用程序时,我们经常会思考我们的应用程序应该做什么。如果无法用一句话回答这个问题,那么可能需要将应用程序拆分成几个具有更清晰逻辑的应用程序。
我在刚开始使用Django时,在某个地方读到了这个思路,并发现我经常问自己这个问题,这对我很有帮助。你的应用程序不一定要具备可重用性,它们可以相互依赖,但它们应该只做一件事。
当我布置自己的应用程序时,我仍然有些困惑。我觉得我的主要应用程序有些臃肿,但同时,如果它们仍然相互依赖并且在将来没有重用和泛化的需要,将它们分开可能不会有什么改进。我倾向于将“不要过早重构”解释为“不要过早优化”。
解决方法是尽量将应用程序拆分成更小的、逻辑更清晰的应用程序。这样做有助于提高代码的可读性和可维护性。如果应用程序之间存在依赖关系,可以使用Django的应用程序之间的关系来管理这些依赖关系。
以下是一个示例代码,展示了如何使用Django的应用程序之间的关系来管理应用程序之间的依赖关系:
from django.apps import AppConfig class MyAppConfig(AppConfig): name = 'myapp' verbose_name = "My App" def ready(self): # 在这里导入和注册其他应用程序 from myotherapp import signals # 例如,导入其他应用程序的信号
通过在应用程序的`AppConfig`中导入和注册其他应用程序,可以在应用程序之间建立依赖关系,以实现更好的代码组织和可维护性。
总之,使用默认Django包作为应用程序的解决方法是尽量将应用程序拆分成更小、逻辑更清晰的应用程序,并使用Django的应用程序之间的关系来管理这些应用程序之间的依赖关系。这样做有助于提高代码的可读性和可维护性。