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网站都是固定的。
- >怎么办呢?
答案 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赏金。