Django 结构:许多应用程序 VS 一个大型应用程序
Django Structures: Many apps VS one large app
我希望这不是一个基于意见的问题,而更像是一个复杂的 django 网站的解决方案。仅供参考,我是 Django 的初学者。
首先,我正在做一个复杂的会计 django 网站,其中有以下功能:
采购(采购订单、报价请求、报价、发票、做)
自定义用户角色和权限,因为我们希望用户设置自己的角色和权限系统
销售额(POS,库存,不胜枚举)
用户和注册
收入和支出跟踪和报告。
有关于 'many apps vs 1 large app' 的文章和 SO 的回答。我的困惑开始了。我发现 django 允许将 views.py 和 models.py 分离到 app/views 和 app/models 中的多个文件中 init.py imports.
我个人不喜欢大的应用程序文件,因为很难找到东西。我更喜欢整洁的结构。但混乱不断袭来。我想做一件事并把它做好,但似乎拥有一个大型应用程序更有意义,因为所有提到的功能都依赖于 ForeignKey。
所以,根据你的经验。您处理此问题的理想文件夹结构和解决方案是什么?
如果您能提供性能差异,那将会很有帮助。
更新:
由于大多数人都说多应用程序,所以我有最后一个问题。
由于 Django 应用程序可以有包含多个 models.py 和 views.py 的 models/ & views/ 文件夹,这意味着一个大型应用程序可以在一个 views/ 文件夹中分成多个视图文件。你怎么看这个?
因为这会将所有迁移放在一个地方,它是否提供了长期的安全性,比如跨应用程序的外键之类的混乱事物。
这种问题我很久以前在不同的平台上问过。常见的答案是
If you want to reuse that, then create an app or if you don't want
then you no need to make a separate app
让我举个例子。如果您的项目具有
等功能
- 分享图片
- 分享文字
- 评论媒体和文字
- 赞成票和反对票选项
用户可以在这里分享图片或文字,其他人可以对其发表评论或 Upvote/Downvote。在这种情况下,如果您将 Comment 设为一个单独的应用程序并 Upvote/Downvote 设为一个单独的应用程序,那么将来如果您必须添加视频以及图像和文本,那么您只需 link Video to Comment 应用程序和Upvote/DOwnvote 应用程序,与包含所有内容的大型应用程序相比,这将减少任务。您也可以相应地管理您的数据库。
在您的情况下,您可以(例如)
- 自定义用户(帮助您在将来添加额外的权限)
- 产品类别(帮助您添加更多类别或子类别)
- 产品或销售等
对于许多管理员来说,当您将这些应用程序添加到您的 settings.py 时,如果您在每个应用程序中单独编辑 admin.py,所有内容都会毫不费力地出现在您的管理面板中。
对于许多视图,您可以将所有模型导入任何应用程序的 views.py 或在其应用程序中单独使用。它不会造成任何问题。 urls.py 和 forms.py 等相同
对于您的解决方案,我建议您创建多个应用程序,每个应用程序包含它自己的 view.py
、models.py
和 urls.py
。您可以做的是,为用户创建一个单独的应用程序,它将包含用户模型(如果您决定覆盖 django 提供的现有用户模型)和所有与用户相关的视图(例如登录、注册等)。我建议您也为 Role 创建一个单独的模型,该模型将包含您系统中的所有角色。每当您决定添加新角色时,创建一个将在 table 中添加角色的管理命令。创建一个枚举类型 class 如:
class Role(enum.Enum):
ADMIN = 1
USER= 2
labels = {
ADMIN: "Admin",
USER: "User"
}
因此 Role
table 中的第一个条目将是管理员 pk=1
等等。
这是一个关于如何创建模型并将事物分开的想法。您可以将 user
从单独的应用程序关联到 table 在您的 sales
应用程序中,因为这不会给您带来任何问题并保持代码的可读性和整洁。
为了您自己的理智,请使用多个应用程序。
只需先将它们列出来,然后找出在逻辑上应该在一个应用程序中放在一起的内容以及应该在下一个应用程序中使用的内容。
您想避免运行进入循环导入!
跨应用外键完全没有问题。基本上只要您在模型中的任何地方使用 USER,您就已经跨应用程序边界进行引用了。
我希望这不是一个基于意见的问题,而更像是一个复杂的 django 网站的解决方案。仅供参考,我是 Django 的初学者。
首先,我正在做一个复杂的会计 django 网站,其中有以下功能:
采购(采购订单、报价请求、报价、发票、做)
自定义用户角色和权限,因为我们希望用户设置自己的角色和权限系统
销售额(POS,库存,不胜枚举)
用户和注册
收入和支出跟踪和报告。
有关于 'many apps vs 1 large app' 的文章和 SO 的回答。我的困惑开始了。我发现 django 允许将 views.py 和 models.py 分离到 app/views 和 app/models 中的多个文件中 init.py imports.
我个人不喜欢大的应用程序文件,因为很难找到东西。我更喜欢整洁的结构。但混乱不断袭来。我想做一件事并把它做好,但似乎拥有一个大型应用程序更有意义,因为所有提到的功能都依赖于 ForeignKey。
所以,根据你的经验。您处理此问题的理想文件夹结构和解决方案是什么?
如果您能提供性能差异,那将会很有帮助。
更新: 由于大多数人都说多应用程序,所以我有最后一个问题。 由于 Django 应用程序可以有包含多个 models.py 和 views.py 的 models/ & views/ 文件夹,这意味着一个大型应用程序可以在一个 views/ 文件夹中分成多个视图文件。你怎么看这个? 因为这会将所有迁移放在一个地方,它是否提供了长期的安全性,比如跨应用程序的外键之类的混乱事物。
这种问题我很久以前在不同的平台上问过。常见的答案是
If you want to reuse that, then create an app or if you don't want then you no need to make a separate app
让我举个例子。如果您的项目具有
等功能- 分享图片
- 分享文字
- 评论媒体和文字
- 赞成票和反对票选项
用户可以在这里分享图片或文字,其他人可以对其发表评论或 Upvote/Downvote。在这种情况下,如果您将 Comment 设为一个单独的应用程序并 Upvote/Downvote 设为一个单独的应用程序,那么将来如果您必须添加视频以及图像和文本,那么您只需 link Video to Comment 应用程序和Upvote/DOwnvote 应用程序,与包含所有内容的大型应用程序相比,这将减少任务。您也可以相应地管理您的数据库。
在您的情况下,您可以(例如)
- 自定义用户(帮助您在将来添加额外的权限)
- 产品类别(帮助您添加更多类别或子类别)
- 产品或销售等
对于许多管理员来说,当您将这些应用程序添加到您的 settings.py 时,如果您在每个应用程序中单独编辑 admin.py,所有内容都会毫不费力地出现在您的管理面板中。
对于许多视图,您可以将所有模型导入任何应用程序的 views.py 或在其应用程序中单独使用。它不会造成任何问题。 urls.py 和 forms.py 等相同
对于您的解决方案,我建议您创建多个应用程序,每个应用程序包含它自己的 view.py
、models.py
和 urls.py
。您可以做的是,为用户创建一个单独的应用程序,它将包含用户模型(如果您决定覆盖 django 提供的现有用户模型)和所有与用户相关的视图(例如登录、注册等)。我建议您也为 Role 创建一个单独的模型,该模型将包含您系统中的所有角色。每当您决定添加新角色时,创建一个将在 table 中添加角色的管理命令。创建一个枚举类型 class 如:
class Role(enum.Enum):
ADMIN = 1
USER= 2
labels = {
ADMIN: "Admin",
USER: "User"
}
因此 Role
table 中的第一个条目将是管理员 pk=1
等等。
这是一个关于如何创建模型并将事物分开的想法。您可以将 user
从单独的应用程序关联到 table 在您的 sales
应用程序中,因为这不会给您带来任何问题并保持代码的可读性和整洁。
为了您自己的理智,请使用多个应用程序。
只需先将它们列出来,然后找出在逻辑上应该在一个应用程序中放在一起的内容以及应该在下一个应用程序中使用的内容。
您想避免运行进入循环导入!
跨应用外键完全没有问题。基本上只要您在模型中的任何地方使用 USER,您就已经跨应用程序边界进行引用了。