Python/Django多租户解决方案

kot*_*tyy 10 python django multi-tenant

我可以使用一些帮助为我正在进行的项目创建攻击计划.

想象一下,该网站是一个负责监管遍布全球的区域销售办事处的团队.该项目的目的是让超级用户快速启动特定于每个办公室的新子站点 - 频繁添加站点.办公室子站点应完全包含特定于该子站点的"管理员"用户,并且应该是用户友好的CMS.超级用户应该能够介入并管理所有这些办公室子站点.

除了独立的办公室子站点实例之外,还需要每个子站点管理联系人,潜在客户等,并将其存储在超级用户的一个中心区域中.

我使用Django完成了一些网站,但从来没有任何多租户.我想了解可能有用的技术或教程/文档的建议.

要求:

  1. 每个子站点使用相同的源(模板,JS,可用功能等),但可以进行修改以反映模板中的自定义内容.
  2. 为每个子站点分配的子域(可选择使用完全限定的域),在项目中配置,而不是在硬编码的设置文件中.
  3. 除了可以访问所有子站点的超级用户之外,还有子站点特定的用户访问控制.
  4. 能够为每个子站点提供"独立"的CMS.即,子站点管理员只能看到他们的内容.我对这个项目的偏好是django-cms,但我愿意接受建议.
  5. 支持从所有子站点汇集数据的应用程序,但将子站点"管理员"限制为仅将其记录查看到该应用程序中.

考虑到上述情况,您会推荐什么方法?我愿意重新考虑技术,但我想坚持使用Python.

Mac*_*Gol 11

有一个很棒的应用程序叫做django-tenant-schemas,它使用PostgreSQL模式机制来创建多租户.

你得到的是SHARED_APPS包含在所有模式(子站点)之间共享的对象,并且TENANT_APPS包含特定于子站点的对象,即用户,记录等.模式完全相互隔离.

每个PostgreSQL架构都绑定到域URL,以便中间件检查HOST请求的一部分并设置db连接的架构以适用于其中一个.

此外,它允许您定义一个PUBLIC_SCHEMA_URLCONF允许您为公共模式指定urlconf文件的文件- 未绑定到任何子站点的元网站.


小智 5

对不起快速而肮脏的回答,我只是分享我为实现多租户所做的工作:

上面的两个库在组合时能够提供多租户且灵活的django实例.我的意思是灵活的是:你可以定义任何模型,无论是"租户"还是"全球".因此,您可以拥有一个包含全球用户但是每个租户产品目录的站点,或者每个租户+产品.从我尝试过的许多django应用程序中,这是实现多租户的最灵活方式