动态settings.py

时间:2016-03-09 16:37:51

标签: python django

我使用django-constance作为库。 虽然有一点我注意到,当我尝试使用ADMINMANAGER

CONSTANCE_CONFIG = {
'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'),
}

发送电子邮件无效。

在MANAGER中我试过这个:

MANAGER = CONSTANCE_CONFIG['ADMINS'][0]

仍然无法发送电子邮件。我错过了错误的实现吗? 或者,您可以建议任何其他可以覆盖ADMINMANAGERsettings.py的库。我正在使用Django 1.8.5和Python 3。

同样在尝试导入settings.py时也会产生错误。

1 个答案:

答案 0 :(得分:4)

1#可能你已经知道,django-constance不支持元组。基本上,特别难以检测元组的小部件 在你的情况下。 ADMINS可以是added/deleted所以你怎么可能通过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#默认日志记录配置使用AdminEmailHandler的{​​{1}}类,其使用mail_admins中的ADMINS值,而不是django settings

因此,一种可能的解决方案可能是创建您自己的constance config类,该类将使用handler中的ADMINS值。因此,请将constance config更改为

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设置,我建议您从django.utils.log(DEFAULT_LOGGING)复制默认记录器配置。并将LOGGING更改为

mail_admins