为了账号安全,请及时绑定邮箱和手机立即绑定

Django 结构:许多应用程序 VS 一个大型应用程序

Django 结构:许多应用程序 VS 一个大型应用程序

慕的地6264312 2021-11-30 10:21:35
我希望这不是基于意见的问题,而更像是复杂 django 网站的解决方案。仅供参考,我是 Django 的初学者。首先,我正在做一个复杂的会计 django 网站,其中有以下功能:采购(采购订单、报价请求、报价单、发票、执行)自定义用户角色和权限,因为我们希望用户设置自己的角色和权限系统销售(POS,库存,太多无法提及)用户和注册收入和支出跟踪和报告。有关于“许多应用程序与 1 个大型应用程序”的文章和 SO 的答案。我的困惑开始了。我发现 django 允许使用init .py 导入将 views.py 和 models.py 分离到 app/views 和 app/models 中的多个文件中。我个人不喜欢大的应用程序文件,因为它很难找到东西。我更喜欢整洁的结构。但混乱不断袭来。我想做一件事并且做得很好,但似乎拥有一个大型应用程序更有意义,因为所有提到的功能都依赖于外键。所以,根据你的经验。您理想的文件夹结构和解决方案是什么?如果您可以提供性能差异,那将很有帮助。更新: 由于大多数人都说多应用程序,因此我有最后一个问题。由于 Django 应用程序可以有包含多个 models.py 和 views.py 的 models/ & views/ 文件夹,这意味着一个大应用程序可以在一个 views/ 文件夹中分成多个视图文件。对此你们怎么看?由于这会将所有迁移放在一个地方,因此它是否可以提供长期安全性,例如跨应用程序的外键之类的杂乱事物。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这种问题我在不同的平台上问了很久。常见的答案是

如果你想重用它,然后创建一个应用程序,或者如果你不想,那么你不需要制作一个单独的应用程序

让我给你举个例子。如果您的项目具有以下功能

  • 分享图片

  • 分享文字

  • 评论媒体和文字

  • 赞成和反对选项

在这里,用户可以分享图像或文本,其他人可以对其进行评论或点赞/反对。在这种情况下,如果您将评论设置为单独的应用程序,并将 Upvote/Downvote 设置为单独的应用程序,那么将来如果您必须添加视频以及图像和文本,那么您只需将视频链接到评论应用程序和 Upvote/DOwnvote 应用程序,即与包含所有内容的大型应用程序相比,任务会更少。您也可以相应地管理您的数据库。

在您的情况下,您可以制作(例如),

  • 自定义用户(帮助您将来添加额外权限)

  • 产品类别(帮助您添加更多类别或子类别)

  • 产品或销售等。

对于许多管理员来说,当您将这些应用程序添加到 settings.py 时,并且如果您在每个应用程序中分别编辑 admin.py,一切都会毫不费力地出现在您的管理面板中。

对于许多视图,您可以将所有模型导入任何应用程序的 views.py 或在其应用程序中单独使用它。它不会造成任何问题。urls.py 和 forms.py 等也是如此。


查看完整回答
反对 回复 2021-11-30
?
绝地无双

TA贡献1946条经验 获得超4个赞

为了您的解决方案,我会建议你创建多个应用程序,包含它自己的每个应用程序view.py,models.py和urls.py。您可以做的是,为用户创建一个单独的应用程序,其中将包含 User 模型(如果您决定覆盖 django 提供的现有用户模型)和所有与用户相关的视图(例如登录、注册等)。我建议您也为 Role 创建一个单独的模型,该模型将包含系统中的所有角色。每当您决定添加新角色时,发出一条管理命令,将在该表中添加角色。创建一个枚举类型类,如:


class Role(enum.Enum):

    ADMIN = 1

    USER= 2


    labels = {

       ADMIN: "Admin",

       USER: "User"

     }

所以Role表中的第一个条目将是 Adminpk=1等等。


这是一个关于如何创建模型并将事物分开的想法。您可以将user一个单独的应用程序关联到您sales应用程序中的一个表,因为这不会给您带来任何问题并保持代码可读和整洁。


查看完整回答
反对 回复 2021-11-30
?
守候你守候我

TA贡献1802条经验 获得超10个赞

为了您自己的理智,请选择多个应用程序。

只需先将它们布置好,然后弄清楚应该在一个应用程序中合乎逻辑地组合在一起的内容以及应该放在下一个应用程序中的内容。

您想避免遇到循环导入!

跨应用程序的外键完全没有问题。基本上,只要您在模型中的任何位置使用 USER,您就会跨应用程序边界进行引用。


查看完整回答
反对 回复 2021-11-30
  • 3 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信