【问题标题】:Handling repetitive content within django apps处理 django 应用程序中的重复内容
【发布时间】:2022-07-21 21:21:16
【问题描述】:

我目前正在 Django 中构建一个工具,用于管理工程部门内的设计信息。这个想法是让所有项目都可以访问一个通用的项目目录。但是,这些项目将根据用户组受到限制。 对于每个项目,您可以从目录中导入项目并在项目中更改它们。要求每个项目必须链接到不同的数据库。

我不完全确定如何解决这个问题。根据我的阅读,我想出的解决方案是拥有多个 django 应用程序。一个代表项目的公共目录(链接到它自己的数据库),然后是每个项目的应用程序(它可以从自己的数据库中写入和读取,但它也可以另外从公共项目目录数据库中读取)。这样,我可以限制哪些用户可以访问哪些数据库/项目。但是,此解决方案的问题在于它不是 DRY。所有项目看起来都一样:相同的模型、相同的表格、相同的模板。它们只是链接到不同的数据库,我不知道如何以聪明的方式做到这一点(没有复制粘贴整个文件,因为我认为管理这会很痛苦)。

我认为可以通过在执行查询(使用 using 属性)时根据经过身份验证的用户组更改数据库标签来避免这种情况。这样做的问题是用户可以访问多个项目。所以,我又不知所措了。

如果您提供任何意见/经验,我将不胜感激。

【问题讨论】:

  • 为什么需要很多数据库?如果每个项目的所有内容都相同,只需添加父模型“项目”并基于 ForeginKey 的“项目”链接中的项目您需要的所有模型。维护一个数据库比许多数据库容易得多:)

标签: python django database reusability


【解决方案1】:

在我看来,您只需要一个能够正确管理其访问权限的应用程序。

如果要求是拥有单独的数据库,那么我不会争辩,但是……他们接受 1 个数据库中的单独表的可能性总是很小

【讨论】:

    【解决方案2】:

    Django 应用程序不会隔离对象,它们是构建代码库的一种方式。这个想法是一个应用程序可以在其他项目中重复使用。为您的项目目录和项目创建一个单独的应用程序是个好主意,但如果您的代码库很小,将它们放在一个中也不成问题。

    如果我正确理解了您的帖子,您想要的是不同部门的数据库是分开的。这本质上是一个多租户问题,本身就是一个很大的话题,有几个选择:

    1. 代码分离 - 您的所有项目/部门都存在于单个数据库和架构中,但由根据最终用户是谁过滤部门的代码分开(字面意思是使用 Django .filters()) .这很容易做到,但如果您的代码错误,数据可能会泄露给错误的用户。 我会为你的用例推荐这个。

    2. 架构分离 - 您仍在使用单个数据库,但每个部门都有自己的架构。为此,您需要使用 Postgresql,但是一旦设置了模式,错误用户可以看到数据的可能性就会小得多。有一些 Django 库,例如 django-tenants,可以完成很多繁重的工作。

    3. 数据库分离 - 每个部门都有自己的数据库。数据泄露的可能性更小,但您必须管理多个数据库,并且更难以扩展。您可以通过 django 进行管理,因为它支持多数据库。

    4. 应用分离 - 每个部门不仅有自己的数据库,而且有自己的应用实例。分离是绝对的,但您仍然需要在像 Heroku 这样的主机上管理多个应用程序,这甚至是较少可扩展的。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2018-11-16
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多