Django multitenant:如何为每个租户自定义django设置“ACCOUNT_EMAIL_VERIFICATION”?

时间:2018-01-14 18:37:28

标签: django multi-tenant django-allauth

Django==1.11.7
django-tenant-schemas==1.8.0
django-allauth==0.34.0

使用django-tenant-schemas(postgres)的多租户站点。 在不同的租户上,需要不同的设置。

更具体地说,ACCOUNT_EMAIL_VERIFICATION

需要不同的设置

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

查看source code,该设置看起来无法自定义,整个django网站都是固定的。

- >怎么办呢?

2 个答案:

答案 0 :(得分:3)

您可以在运行时计算设置,因为它只是一个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乐趣。

在编程方面,您始终处于控制之中。

答案 1 :(得分:0)

以下列方式解决:

在settings.py中:

try:
    ACCOUNT_EMAIL_VERIFICATION = os.environ['ACCOUNT_EMAIL_VERIFICATION_OVERRIDE']
except KeyError:
    ACCOUNT_EMAIL_VERIFICATION = 'mandatory'

在租户的wsgi.py文件中,电子邮件验证是可选的:

os.environ['ACCOUNT_EMAIL_VERIFICATION_OVERRIDE'] = 'optional'

其他租户的wsgi文件保持不变。

当他建议查看wsgi文件时,给予Adelin赏金。