python - Django 结构:许多应用程序 VS 一个大型应用程序
问题描述
我希望这不是一个基于意见的问题,而更像是一个复杂的 django 网站的解决方案。仅供参考,我是 django 的初学者。
首先,我正在做一个复杂的会计 django 网站,其中有以下功能:
采购(采购订单、报价请求、报价单、发票、做)
自定义用户角色和权限,因为我们希望用户设置自己的角色和权限系统
销售(POS,股票,不胜枚举)
用户和注册
收入和支出跟踪和报告。
有关于“许多应用程序与 1 个大型应用程序”的文章和 SO 的答案。我的困惑开始了。我发现 django 允许使用init .py 导入将 views.py 和 models.py 分离到 app/views 和 app/models 中的多个文件中。
我个人不喜欢大的应用程序文件,因为它很难找到东西。我更喜欢整洁的结构。但混乱不断袭来。我想做一件事并把它做好,但似乎拥有一个大型应用程序更有意义,因为所有提到的功能都依赖于 ForeignKey。
所以,根据你的经验。您理想的文件夹结构和解决方案是什么?
如果您可以提供性能差异,那将很有帮助。
更新: 由于大多数人都说多应用程序,我对此有最后一个问题。由于 Django 应用程序可以有 models/ 和 views/ 文件夹,其中包含多个 models.py 和 views.py,这意味着一个大型应用程序可以在一个 views/ 文件夹中分离成多个视图文件。对此你们怎么看?因为这会将所有迁移都放在一个地方,它是否在跨应用程序的外键等杂乱事物方面提供长期安全性。
解决方案
这种问题我很久以前在不同的平台上问过。常见的答案是
如果你想重用它,然后创建一个应用程序,或者如果你不想要,那么你不需要制作一个单独的应用程序
让我给你举个例子。如果您的项目具有以下功能
- 共享图像
- 分享文字
- 评论媒体和文字
- 赞成和反对选项
在这里,用户可以共享图像或文本,其他人可以对其发表评论或赞成/反对。在这种情况下,如果您将 Comment 设为单独的应用程序并将 Upvote/Downvote 设为单独的应用程序,那么将来如果您必须添加 Video 以及 Image 和 Text,那么您只需将 Video 链接到 Comment 应用程序和 Upvote/Downvote 应用程序,即与包含所有内容的大型应用程序相比,任务将更少。您也可以相应地管理您的数据库。
在您的情况下,您可以制作(例如),
- 自定义用户(帮助您将来添加额外的权限)
- 产品类别(帮助您添加更多类别或子类别)
- 产品或销售等
对于许多管理员来说,当您将这些应用程序添加到您的 settings.py 中,并且如果您在每个应用程序中分别编辑 admin.py 时,所有内容都会出现在您的管理面板中,没有任何麻烦。
对于许多视图,您可以将所有模型导入任何应用程序的 views.py 或在其应用程序中单独使用。它不会引起任何问题。同样适用于 urls.py 和 forms.py 等。
推荐阅读
- r - 如何根据多列中的值有条件地改变 R 中的变量?
- java - 如何防止 Maven Surefire 自动运行 Spring 集成测试
- prometheus - 使用 Prometheus 指标存储时间戳
- java - Java SimpleDateFormat 的错误输出
- asp.net-core - 即使在挑战中指定不同的方案时,也会在我的 AuthenticationHandler 中调用 HandleChallengeAsync
- css - 在 react-native-video 或 expo-av 中添加 css 到子视频
- nfc - NTAG I2C FAST_READ 在特定页面地址后出错
- ghost-blog - 幽灵帖子排序
- python - 模块“光标”没有属性“关闭”
- python - 将行复制并附加到数据框中,并将时间戳列增加一分钟