[英]Dynamic settings.py
我已经将django-constance用作库。 尽管我注意到的一件事是,当我尝试使用ADMIN
和MANAGER
CONSTANCE_CONFIG = {
'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'),
}
发送电子邮件不起作用。
在MANAGER中,我已经尝试过:
MANAGER = CONSTANCE_CONFIG['ADMINS'][0]
仍然发送电子邮件不起作用。 我错过了一个错误的实现吗? 或者,您可以建议其他任何可以在settings.py
覆盖ADMIN
和MANAGER
库。 我正在使用Django 1.8.5和Python 3。
当尝试导入settings.py内部时,也会产生错误。
1#
也许您已经知道, django-constance
不支持元组。 基本上,很难在您的情况下专门为元组检测小部件。 可以added/deleted
ADMINS,这样就可以通过single widget
使它动态化.. !!(想想所有django窗口部件)。 因此,这里CONSTANCE_ADDITIONAL_FIELDS
也将不起作用。
2#
我认为您误解了django constance的工作原理。 它不会刷新您的django server
。 因此, MANAGER = CONSTANCE_CONFIG['ADMINS'][0]
完全错误(即使使用CONSTANCE_ADDITIONAL_FIELDS
)。 您在此处访问constant
(非动态)。 您需要像访问
from constance import config
print(config.ADMINS)
3#
默认日志记录配置对mail_admins
使用AdminEmailHandler
类, mail_admins
使用django settings
ADMINS
值,而不是constance config
。
因此,一种可能的解决方案可能是创建您自己的handler
类,该handler
类将使用constance config
ADMINS
值。 因此,将您的setting.py
更改为
CONSTANCE_CONFIG = {
'ADMIN1': ('admin@gmail.com', 'This one will receive error on 500'),
} # you can add as many admins as you want with ADMIN1, ADMIN2 etc(no tuple)
然后创建自己的处理程序类,它将使用CONSTANCE_CONFIG
。
from django.utils.log import AdminEmailHandler
from constance import config
from django.conf import settings
from django.core.mail.message import EmailMultiAlternatives
class ConstanceEmailHandler(AdminEmailHandler):
def send_mail(self, subject, message, html_message=None, fail_silently=False, *args, **kwargs):
# create a list of ADMIN emails here, if you have more then one ADMIN
mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
message, settings.SERVER_EMAIL, [config.ADMIN1],
connection=self.connection())
if html_message:
mail.attach_alternative(html_message, 'text/html')
mail.send(fail_silently=fail_silently)
然后更改您的LOGGER
配置。 如果您没有自定义的LOGGING
设置,建议您从django.utils.log
(DEFAULT_LOGGING)复制默认的记录器配置。 并将mail_admins
更改为
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'], # change it to require_debug_true if you want to test it locally.
'class': '<yourproject>.<yourfile>.ConstanceEmailHandler', # path to newly created handler class
'include_html': True
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.