使用默认的Django包作为应用程序是否正确?

19 浏览
0 Comments

使用默认的Django包作为应用程序是否正确?

我准备使用Django构建一个相当复杂的“产品”。在这个上下文中,我将避免使用“项目”和“应用程序”这些术语,因为我不清楚它们在Django中的具体含义。

项目可以有多个应用程序。应用程序可以在多个项目之间共享。很好。

我不是在重新发明博客或论坛-我认为我的产品没有任何部分可以在任何环境中重复使用。直观地说,我会称之为一个“应用程序”。那么,我是不是应该在一个“app”文件夹中完成所有工作?

如果是这样...在Django的project.app命名空间中,我倾向于使用myproduct.myproduct,但当然这是不允许的(但我正在构建的应用程序是我的项目,我的项目是一个应用程序!)。因此,我认为也许我应该通过为每个“重要”模型构建一个应用程序来处理Django,但是我不知道在我的架构中如何划分边界来将其分成应用程序-我有很多具有相对复杂关系的模型。

我希望有一个常见的解决方案...

0
0 Comments

使用默认的Django包作为应用程序是否正确?

这个问题的出现的原因是:

- 默认情况下,Django的设置不鼓励将默认包用作应用程序,而是鼓励创建一个独立的应用程序目录。

- 使用相同的名称来命名项目和其中的应用程序会导致manage.py无法正确导入项目设置。

解决方法是:

- 遵循Django的约定,将应用程序放在独立的应用程序目录中。

- 如果需要创建可重用的功能模块,可以创建一个顶级应用程序,其中包含widgets.pyfields.pycontext_processors.py等。

- 如果创建一个通用的博客格式,在一个应用程序中包装它,并配置一个Django项目的实例来使用该应用程序的内容。

- 如果有需要自己开发的功能,可以创建一个独立的目录来存放该功能,以便可以轻松地将其删除。

总之,使用独立的应用程序目录是符合Django约定的做法,这有助于其他人与项目一起工作。同时,遵循约定也有助于提高代码的可读性和维护性。

0
0 Comments

在使用startprojectstartapp之后,没有任何限制阻止我们将"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

,谢谢。。 🙂 很高兴看到四年后评论得到了回答。。干杯

0
0 Comments

这是一个关于使用默认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的应用程序之间的关系来管理这些应用程序之间的依赖关系。这样做有助于提高代码的可读性和可维护性。

0