Django多租户:如何为每个租户定制Django设置?

人气:878 发布:2022-10-16 标签: django multi-tenant django-allauth

问题描述

Django==1.11.7
django-tenant-schemas==1.8.0
django-allauth==0.34.0
使用Django-Tenant-架构(Postgres)的多租户站点。 对于不同的租户,需要不同的设置。

具体地说,ACCOUNT_EMAIL_VERIFICATION需要不同的设置

一个租户需要ACCOUNT_EMAIL_VERIFICATION = "optional",而另一个租户需要ACCOUNT_EMAIL_VERIFICATION ="mandatory"

查看source code,该设置似乎无法自定义,它已针对整个Django站点进行了修复。

->如何做到这一点?

推荐答案

您可以在运行时计算设置,因为它只是一段Python代码。

使用您喜欢的方式以编程方式设置该特定代码。一个例子:

# predefine the settings per tenant
ACCOUNT_EMAIL_VERIFICATION_PER_TENANT = {
    "tenant_x": "mandatory",
    "tenant_y": "optional",
}

# implement get_tenant 

def get_tenant():
    # here be tenant logic
    pass

this_tenant = get_tenant()
ACCOUNT_EMAIL_VERIFICATION = ACCOUNT_EMAIL_VERIFICATION_PER_TENANT[get_tenant()]

或者您可以拥有多个设置文件并按您的意愿加入它们。以下是how django does。

哦,如果您想要将逻辑从设置文件中分离出来,并在评估设置之前运行它,您可以在启动服务器时检查执行的轨迹(例如,从manage.py开始,然后在其中插入get_tenant逻辑)。它很可能位于从wsgi.py文件开始的某个位置--创建application实例并开始所有Django乐趣的地方。

编程始终由您掌控。

275