我使用django-constance作为库。
虽然有一点我注意到,当我尝试使用ADMIN
和MANAGER
CONSTANCE_CONFIG = {
'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'),
}
发送电子邮件无效。
在MANAGER中我试过这个:
MANAGER = CONSTANCE_CONFIG['ADMINS'][0]
仍然无法发送电子邮件。我错过了错误的实现吗?
或者,您可以建议任何其他可以覆盖ADMIN
中MANAGER
和settings.py
的库。我正在使用Django 1.8.5和Python 3。
同样在尝试导入settings.py时也会产生错误。
答案 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