Python 动态设置.py
我把它用作图书馆。 虽然我注意到一件事,当我尝试使用Python 动态设置.py,python,django,Python,Django,我把它用作图书馆。 虽然我注意到一件事,当我尝试使用ADMIN和MANAGER CONSTANCE_CONFIG = { 'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'), } 发送电子邮件不起作用 在MANAGER中,我尝试了以下方法: MANAGER = CONSTANCE_CONFIG['ADMINS'][0] 仍然发送电子邮件不起作用。我是否错过了一个错误的实现? 或者您可以推荐任何其他可以覆盖settings.p
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
另外,在尝试导入inside settings.py时,它也会产生错误。1
您可能已经知道,django constance
不支持元组。基本上,很难专门检测元组的小部件
就你而言。管理员可以添加/删除
,那么您如何通过单个小部件
使其成为动态的呢。。!!(想想所有django小部件)。所以这里
CONSTANCE\u其他字段也将不起作用
2
我想你误解了django constance的工作。
它不会刷新您的django服务器
。因此MANAGER=CONSTANCE\u CONFIG['ADMINS'][0]
是完全错误的(即使使用CONSTANCE\u附加字段
)。您可以在此处访问常量
值(非动态)。
你需要像这样访问它
from constance import config
print(config.ADMINS)
3
默认日志记录配置使用AdminEmailHandler
类作为mail\u管理员
,它使用django设置中的admins
值,而不是constance配置
因此,一个可能的解决方案可能是创建您自己的处理程序
类,该类将使用管理员
来自constance config的值。因此,将设置.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)
'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
},
然后创建自己的处理程序类,该类将使用CONSTANCE\u 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)
然后更改记录器
配置。如果您没有自定义的日志记录设置,我建议您从django.utils.log
(默认日志记录)复制默认日志记录程序配置。并将邮件管理员更改为
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)
'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
},
“邮件管理员”:{
“级别”:“错误”,
“过滤器”:[“require_debug_false]”,如果要在本地测试,请将其更改为require_debug_true。
“类”:“…ConstanceEmailHandler”,#新创建的处理程序类的路径
'include_html':True
},
您所说的“发送电子邮件不起作用”是什么意思?有错误吗?谢谢。您正在尝试动态更改django设置吗?你看了吗?@alecxe,我用Admin和Manager在我的电子邮件中发送错误日志,当不使用django constance时,它在电子邮件中发送错误(这是正确的方法),但当我使用django constance时,没有错误,但它不发送我的电子邮件。@PeterBrittain是的,我在这里也尝试了一些,但是似乎找不到让管理员和经理为他们工作的方法。你也看到答案()说你不能更改设置了吗?是的,有一些您可以更改(如对答案的评论中所述),但没有文档记录或支持…如果您希望有多个管理员,如:(('admin1','admin1'),该怎么办admin1@domain),('admin1','admin2@domain.tld'), )您将如何在constance中使用它以及您实现的功能?请仔细阅读答案。在constance配置中添加ADMIN2=(,)。然后在发送邮件
功能中[config.ADMIN1,config.ADMIN2]