gpt4 book ai didi

django - 如何将 django 项目划分为应用程序

转载 作者:行者123 更新时间:2023-12-04 18:29:37 25 4
gpt4 key购买 nike

我想知道如何将具有层次结构的项目划分为应用程序。假设我正在尝试构建类似 github.com 的东西。
在 github.com 中,一个帐户有一些存储库,这些存储库具有一些功能,例如代码、问题或拉取请求。并且这些特征引用了其他特征。在这种情况下,哪个是应用程序,哪个不是?那个时候,我应该把应用程序放在根目录还是作为子应用程序放在一个应用程序目录中?

最佳答案

在理想的世界中,每个应用程序都应该独立于其他应用程序,或者只是与其他应用程序松散耦合。但在许多现实世界的情况下,往往相互依赖,以至于几乎不值得尝试将它们抽象化。

那么,在那种情况下.. 将它们分开的最佳方法是将它们划分为功能组,其中每个应用程序中的大多数 View 、模型等仅在应用程序中使用。因此,鉴于您的 github 示例,“问题”可能是他们自己的应用程序。 issues应用程序将具有仅与显示、编辑和服务(ajax 请求等)问题相关的特定 View 、用于存储问题及其持续状态的模型、仅负责呈现问题 View 的模板、问题条目(例如,每个用户的问题) , 每个项目的问题,特定问题的详细信息。实际上有很多特定于问题的代码。

是的,当您完成时,您将拥有例如从这些问题模型到用户模型以及可能是提交模型、项目模型的外键。许多相互依赖会阻止 issues应用程序在没有其他应用程序的情况下工作。但从逻辑上讲,当需要处理问题系统时,您会知道该去哪里……因为所有问题代码都在一个地方。所有默认问题设置都在 issues/settings.py 中例如,所有主要与问题相关的表都将以 app_label 为前缀。例如。 issues_issue , issues_comment .. 等等..

所以基本上,尝试在核心功能的基础上分解它,并尽量减少依赖的数量......或者至少,尽量避免循环依赖......例如,某些应用程序将有许多其他应用程序依赖它们,有些应用程序将有没有任何。尽量避免致命的拥抱。但是,最终,依赖关系会发生。

在某些情况下,您可能能够实现可选的依赖项,例如……当 App A、Model_A 中发生某些事情时,它应该触发 App B、Model_B 中发生的某些事情……但前提是 App B 已安装。有一些方法可以实现这种耦合度较低的行为,例如 Django 的信号系统

https://docs.djangoproject.com/en/2.0/ref/signals/

但这不如外键可靠,所以不要特意将永远不会解耦的东西松散耦合。

尝试根据紧密耦合的功能将事物划分为应用程序,例如。与其他 View 相关的 View 。将所有应用程序所依赖的东西放入主应用程序或库中......你会发现随着代码的增长,你的代码更容易维护。

关于django - 如何将 django 项目划分为应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com