我可以使用一些帮助为我正在进行的项目创建攻击计划。
想象一下,该网站是一个负责监管遍布全球的区域销售办事处的团队。该项目的目的是让超级用户快速启动特定于每个办公室的新子站点 - 频繁添加站点。办公室子站点应完全包含在" admin"特定于该子站点的用户,应该是用户友好的CMS。超级用户应该能够介入并管理所有这些办公室子站点。
除了自包含的办公室子站点实例外,还需要每个子站点管理联系人,潜在客户等,并将其存储在一个中心区域,供超级用户使用。
我使用Django完成了一些网站,但从来没有任何多租户。我想了解可能有用的技术或教程/文档的建议。
要求:
考虑到上述情况,您会推荐什么方法?我愿意重新考虑技术,但我想坚持使用Python。
答案 0 :(得分:11)
有一个名为django-tenant-schemas的优秀应用程序,它使用PostgreSQL架构机制来创建多租户。
你得到的是包含所有模式(子网站)共享的对象的SHARED_APPS
,以及包含特定于子网站的对象的TENANT_APPS
,即用户,记录等。模式完全相互隔离。
每个PostgreSQL架构都绑定到域URL,以便中间件检查请求的HOST
部分,并设置数据库连接的架构以适应它。
此外,它允许您定义PUBLIC_SCHEMA_URLCONF
,它允许您为 public 架构指定urlconf文件 - 未绑定到任何子站点的元站点。
答案 1 :(得分:5)
很抱歉快速而肮脏的回答,我只是分享我为实现多租户而做的事情:
上述两个库在组合时,能够提供多租户且灵活的django实例。我的意思是灵活的是:您可以定义任何模型,无论是“租户”还是“全球”。因此,您可以拥有一个包含全球用户但是每个租户产品目录的站点,或者每个租户+产品。从我尝试过的许多django应用程序中,这是实现多租户的最灵活方式
答案 2 :(得分:2)
基于Django的CMS Mezzanine也有multi-tenancy support。
除了我认为的子站点用户控件之外,它具有您请求的大多数功能。对于管理员用户,管理页面可以由站点分隔,但普通用户不能。
但是,如果你不需要CMS,这可能对你的用例来说太过分了,但我想在这里提一下它的完整性。
答案 3 :(得分:0)
我一直尝试将 django-tenants 与 Wagtail 一起使用一段时间,但这种组合效果不佳,或者让我说,尽管尝试了很多次,我还是无法获得 Wagtail 管理员-页面正常工作。 我想会尝试切换到我更广泛使用的 django-tenant-schemas 。
注意:django-tenant-schemas 现在不维护。