我希望这不是基于意见的问题,而是更像是对复杂的django网站的解决方案。菲,我是Django的初学者。
首先,我正在做一个复杂的会计django网站,该网站具有以下功能:
购买(购买订单,报价请求,报价,发票,订单)
自定义用户角色和权限,因为我们希望用户设置自己的角色和权限系统
销售(POS,股票,太多了)
用户和注册
收入和支出跟踪和报告。
关于“许多应用程序与1个大型应用程序”,有一些文章和SO的答案。我的困惑开始了。我发现django允许使用 init .py导入将views.py和models.py分离为应用程序/视图和应用程序/模型中的多个文件。
我个人不喜欢大型应用文件,因为很难找到东西。我更喜欢整洁的结构。但是混乱不断地袭击着我们。我想做一件事情并且做得很好,但是似乎拥有一个大型应用程序更有意义,因为所有提到的功能都依赖于ForeignKey。
因此,根据您的经验。您理想的文件夹结构和解决方案是什么?
如果您可以提供性能差异会有所帮助。
更新: 由于大多数人都说过多应用,因此我对此有最后一个疑问。 由于Django应用程序可以在内部包含多个models.py和views.py的models /&views /文件夹,因此这意味着一个大型应用程序可以分离为views /文件夹内的多个views文件。你们怎么看? 由于这会将所有迁移都放在一个地方,因此它可以为杂乱的事情(例如跨应用程序的外键)提供长期安全性。
答案 0 :(得分:1)
我很久以前就在不同的平台上问过这种问题。常见答案是
如果您想重复使用它,请创建一个应用程序,或者如果您不想 那么您无需制作单独的应用
让我给你一个例子。如果您的项目具有
之类的功能在这里,用户可以共享图像或文本,其他用户可以对此图像发表评论或对其进行向上/向下投票。在这种情况下,如果您将“注释”作为一个单独的应用程序,而将“上投票/向下投票”作为一个单独的应用程序,那么将来如果您必须将“视频”与“图像”和“文字”一起添加,则只需要将“视频”链接到“评论”应用程序和“上/下投票”应用程序,与拥有所有内在功能的大型应用程序相比,这项任务将更少。您也可以相应地管理数据库。
以您的情况为例,您可以制作
对于许多管理员来说,当您将这些应用添加到settings.py中时,并且如果您分别在每个应用中编辑admin.py,所有内容都会显示在管理面板中,而无任何麻烦。
对于许多视图,您可以将所有模型导入任何应用程序的views.py或在其应用程序中单独使用。不会造成任何问题。 urls.py和forms.py等也一样。
答案 1 :(得分:0)
对于您的解决方案,我建议您创建多个应用程序,每个应用程序都包含自己的@RequestMapping(value = "/{eid}/**", method = RequestMethod.GET)
public ResponseEntity<Object> share(@PathVariable String eid, HttpServletRequest request) {
Object uriObject = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
if (null != uriObject) {
String urlParts = uriObject.toString().replaceFirst("^/" eid + "/", "");
}
....
}
,view.py
和models.py
。您可以做的是,为用户创建一个单独的应用程序,其中将包含用户模型(如果您决定覆盖django提供的现有用户模型)和所有与用户相关的视图(例如登录,注册等)。我建议您也为角色创建一个单独的模型,该模型将包含系统中的所有角色。做出管理命令,只要您决定添加新角色,便会在该表中添加角色。创建一个枚举类型类,如:
urls.py
因此class Role(enum.Enum):
ADMIN = 1
USER= 2
labels = {
ADMIN: "Admin",
USER: "User"
}
表中的第一个条目将是带有Role
的Admin,依此类推。
这是关于如何创建模型并使事物分开的想法。您可以将pk=1
从一个单独的应用程序关联到您的user
应用程序中的表,因为这不会给您带来任何问题,并保持代码的可读性和整洁性。
答案 2 :(得分:0)
出于自己的理智,请使用多个应用程序。
首先将它们布局,然后弄清楚应该在一个应用程序中将哪些逻辑组合在一起,然后将逻辑应用到下一个应用程序。
您要避免遇到循环导入!
跨应用程序的外键完全没有问题。基本上,只要您在模型中的任何地方使用USER,就已经可以跨应用边界进行引用。