gpt4 book ai didi

python - 动态设置.py

转载 作者:太空狗 更新时间:2023-10-30 00:06:09 29 4
gpt4 key购买 nike

我用过django-constance作为图书馆。虽然我注意到一件事是当我尝试使用 ADMINMANAGER

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

无法发送电子邮件。

在 MANAGER 中我试过这个:

MANAGER = CONSTANCE_CONFIG['ADMINS'][0]

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

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

最佳答案

1# 可能你已经知道,django-constance 不支持元组。基本上很难专门检测元组的小部件在你的情况下。 ADMINS 可以被添加/删除 所以你怎么可能通过单个小部件 使它动态化..!!(想想所有的 django 小部件)。所以在这里 CONSTANCE_ADDITIONAL_FIELDS 也将不起作用。

2# 我认为您误解了 django constance 的工作原理。它不会刷新您的 django 服务器。所以 MANAGER = CONSTANCE_CONFIG['ADMINS'][0] 是完全错误的(即使使用 CONSTANCE_ADDITIONAL_FIELDS)。您在这里访问 constant 值(不是动态的)。 您需要像这样访问它

from constance import config
print(config.ADMINS)

3# 默认日志记录配置使用 AdminEmailHandler 类用于 mail_admins,它使用来自 ADMINS 值django 设置,而不是 constance config

因此,一种可能的解决方案可能是创建您自己的 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
},

关于python - 动态设置.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897395/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com