我想从每个租户的不同电子邮件发送验证电子邮件,但无法覆盖此。如何在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'
2条答案
按热度按时间mmvthczy1#
我不认为这是可能的django的方式,如果你正在使用多租户包,因为它只是一个应用程序与不同的模式,因为django加载设置第一,然后其他模型跟随。但是解决这个问题的一个要点是使用环境变量,比如;
一旦django重新加载,这个变化仍然会发生。
dirty强制重新加载设置,如;
但将应用全局更改
另一个建议是在代码中执行操作之前覆盖这些设置。获取当前租户的请求并手动覆盖此操作的设置。如何在Django中使用不同的设置进行单元测试?
继续尝试,这不是不可能的,但只是不是djangoish干净的风格。
更多资源
https://github.com/edavis/django-override-settingshttps://www.djangosnippets.org/snippets/2437/
更新
你可以在中间件中温和地处理它并保持代码干净,检查这个答案Django multitenant:如何为每个租户定制django设置“ACCOUNT_EMAIL_VERIFICATION”?
希望有帮助😊
ygya80vv2#
您可以动态更改环境设置:
另一种方法是创建一个函数(例如在类中),它获取租户ID等参数;并设置或返回所需的电子邮件设置。