多租户模式:使用 django rest 框架的动态 api 路由

Posted

技术标签:

【中文标题】多租户模式:使用 django rest 框架的动态 api 路由【英文标题】:multi-tenant-schemas:dynamic api routing using django restframework 【发布时间】:2018-05-02 11:43:13 【问题描述】:

我是多租户架构的新手,使用 django-tenant-schema 开发 SaaS 产品

我的要求是客户注册产品。对于每个注册的客户,我都通过遵循单一数据库和隔离模式的方法来创建新模式。每当客户端从浏览器请求时,我都可以通过使用子域并授予访问其特定模式的权限来识别它们。当我开始编码时,很多问题都在我的脑海中弹出。我真的很抱歉在这里问,但***只是我最后的希望。数据库如下所示

数据库

Public_Schema auth_user Clients_List_Table ClientA_Schema auth_user ClientA_User_List ClientB_Schema auth_user ClientB_User_List

Q1.我们可以对每个客户端执行什么样的管理操作?

我有 rest api 例如 http://client.example.com/api/user_list/ 这里的客户端可能是 ClientA 或 ClientB

第二季度。我们如何实现api路由,当用户在浏览器请求时动态获取客户端名称,让我们使用相应的模式来显示当前客户端的user_list。

任何回复都会有所帮助。提前致谢。

【问题讨论】:

【参考方案1】:

我关注了django-tenants,他们的团队几乎实现了 django 多租户 SaaS(软件即服务)应用程序所需的一切。所以除了理解架构之外,我没有做太多的工作;我只想回答这个问题。

首先从管理员及其权限开始;对于上述要求,我有两个管理员角色:tenants_admintenant_admin

在这里,tenants_admin(为产品提供服务)能够管理tenants(购买产品的个人公司); tenants_admin 可以操作租户的数据,他们位于公共模式的表中。

现在介绍 tenant_admin,他对租户用户(假设是单个公司的员工)的数据具有特权。

现在从django-tenants 克隆项目,专门为租户创建应用程序。这些租户架构彼此高度隔离,包括应用程序名称和rest_framework 到租户应用程序。之后像往常一样实现 REST API;这些 API 将使用我们为项目创建的中间件自动导航。

【讨论】:

嗨,我也在使用 django-tenants,但前端是分离的。一切都适用于每个租户的应用程序,但我很难找到一个用于注册租户的 api。对于每个租户的用户注册,我从 django.contrib.auth.base_user 扩展 BaseUserManager,但 django-tenant 文档没有这方面的文档。

以上是关于多租户模式:使用 django rest 框架的动态 api 路由的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django REST 框架进行批量插入的最佳设计模式是啥?

如何使用 django rest 框架保存多对多字段对象

Django REST框架--模式与客服端库

使用 Django Rest 框架的 Mysql 多连接性能

SaaS多租户系统框架下的管理模式优点

django 上多租户应用程序的最佳架构