如何在使用django multitenant时在www.example.com文件中动态设置不同的参数setting.py?

2izufjch  于 2023-05-30  发布在  Go
关注(0)|答案(2)|浏览(118)

我想从每个租户的不同电子邮件发送验证电子邮件,但无法覆盖此。如何在www.example.com文件中按租户动态设置以下参数setting.py

EMAIL_BACKEND 
EMAIL_HOST 
EMAIL_USE_TLS 
EMAIL_PORT
EMAIL_HOST_USER
EMAIL_HOST_PASSWORD

ANYMAIL = {
"MAILJET_API_KEY":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"MAILJET_SECRET_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
EMAIL_BACKEND = "anymail.backends.xxx.EmailBackend"
DEFAULT_FROM_EMAIL = 'dynamic@gmail.com'
mmvthczy

mmvthczy1#

我不认为这是可能的django的方式,如果你正在使用多租户包,因为它只是一个应用程序与不同的模式,因为django加载设置第一,然后其他模型跟随。但是解决这个问题的一个要点是使用环境变量,比如;

import os

DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'dynamic@gmail.com')

一旦django重新加载,这个变化仍然会发生。
dirty强制重新加载设置,如;

import django
import importlib
django.setup()
importlib.reload(importlib.import_module('yourappname.settings'))

但将应用全局更改
另一个建议是在代码中执行操作之前覆盖这些设置。获取当前租户的请求并手动覆盖此操作的设置。如何在Django中使用不同的设置进行单元测试?
继续尝试,这不是不可能的,但只是不是djangoish干净的风格。
更多资源
https://github.com/edavis/django-override-settingshttps://www.djangosnippets.org/snippets/2437/

更新

你可以在中间件中温和地处理它并保持代码干净,检查这个答案Django multitenant:如何为每个租户定制django设置“ACCOUNT_EMAIL_VERIFICATION”?
希望有帮助😊

ygya80vv

ygya80vv2#

您可以动态更改环境设置:

import os

os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"

另一种方法是创建一个函数(例如在类中),它获取租户ID等参数;并设置或返回所需的电子邮件设置。

相关问题