多租户模块应该是 Django 创建出色 SaaS 产品的“必备”
多租户模块应该是 Django 创建出色 SaaS 产品的“必备”
尝试在 Django 中创建多租户应用程序可能是一项艰巨的任务。在子域自己的域扩展中分离每个实体的方法可能有点吓人且耗时。我已经尝试过并且失败了。
多租户应用程序通过手动分离数据库条目并将它们映射到唯一的 URL 或子域来分离实体,例如公司。简单来说,A 公司和 B 公司可能共享服务器,但每个服务器的域分别映射到:companyA.mydomain.com 和 companyB.mydomain.com。
从头开始构建这种分离可能需要很多代码。 斯坦因代码 有一个关于如何通过代码实现多租户的很棒的简短教程,如果你可以跟随的话。
另一条路线是看看是否有人也构建了这个产品或维护良好的模块来实现这一点。我将简要介绍两种产品以及它们的优势。
Django 租户
对有助于创建多租户模式的 Django 模块的简单搜索会将您带到几个具有相同名称的模块。 Django 租户 是一个更新版本 Django 租户模式 前者支持较新版本的 Django。
它的文档很好,并且有关于如何创建多租户应用程序的教程。首先要做的事情:这个模块只适用于 PostgreSQL。因此,如果您启用了另一个数据库,这就是路的尽头。
然而,对于大多数 Django 开发人员来说,PostgreSQL 总是很合适。
Django Tenants 旨在实现“半隔离方法:共享数据库,分离模式”。所有租户一个数据库,但每个租户一个模式。”
将每个租户都放在自己的数据库中是一种选择,但最终可能会变得昂贵。
安装模块需要对中间件进行一些调整,同时添加一个特殊的数据库路由。因此,将模块应用到您的项目应该不难,但它可能会导致与您安装的其他模块发生冲突。可以找到一个很棒的教程 这里 .
这种方法最大的优势是什么? Django Tenants 将您的所有租户数据分开,并防止在 Django 模型上的逻辑分隔租户时可能发生的交叉污染。
Django 组织
如果您想在应用程序中启动并运行多租户,Django Organization 也是一个成熟且维护良好的模块。有人可能会说它不是一个纯粹的多租户模块,而更像是一个多用户模块。最后,这取决于你想做什么。
安装非常简单,您可以通过多种方式设置与用户公司或组织相关的多用户应用程序。
它的文档很清楚,所以我不想在这里重写它。 Django Organization 的一些好处是它开箱即用,带有电子邮件邀请引擎,以及它自己的自定义用户模型,包括:OrganizationOwner(创建者)、OrganizationUser 和通用组织模型。
如果你开始一个新项目,最好安装 Django 组织并使用它的注册模块。如果您已经有一个正在进行的项目,则需要您重构代码并决定何时使用 Django 的内部用户注册以及何时使用 Django-Organization 的。
例如,如果我正在创建公司模型:
类公司(模型。模型):
您可能希望从 Django-Organization 的“组织”模型继承,如下所示:
请注意,Organization 模型带有诸如 Name 之类的字段,您不必将其作为字段包含在 Company 中。
然后,您可以轻松确保创建公司的人成为 OrganizationOwner,因为该用户将能够发送邀请并添加用户。创建公司时,您可以快速为用户分配 Owner 角色:
尽管 Django-Organization 很棒,但开发人员必须确保他们视图中的逻辑将数据从一家公司分离到另一家公司。一个很酷的解决方法是该模块确保未注册到某个公司或组织的用户无法访问。
为什么 Django 应该开箱即用多用户/多租户
SaaS 模式正在迅速占领数字世界。许多产品,尤其是针对企业的产品,需要有一种简单的方法来使用 Django 实现多用户和多租户选项。目前,这些可以由 PostgreSQL 模式支持。
Django有更好的选择吗?你有使用 Django-Tenants 或 Django-Organization 的经验吗?在评论部分让我知道。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明