Я занимаюсь обновлением существующего приложения Django с 1,8 до 1,9 (в частности, 1.9.4). Я использую собственный обработчик ведения журнала для отправки сообщений электронной почты администратора через сторонний поставщик электронной почты (SendGrid).Django 1.9 Custom Handging Handler Класс: «Невозможно настроить обработчик« mail_admins »: приложения еще не загружены».
При выполнении команды runserver
следующее отслеживающий генерируется:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/Users/coredev/.virtualenvs/django19/lib/python3.4/site-packages/django/utils/log.py", line 71, in configure_logging
logging_config_func(logging_settings)
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 789, in dictConfig
dictConfigClass(config).configure()
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py", line 565, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'mail_admins': Apps aren't loaded yet.
Вот соответствующие фрагменты кода для пользовательского класса регистрации:
пользовательского обработчика в settings.LOGGING:
'mail_admins': {
'level': 'ERROR',
'class': 'coredev.utils.logging.SendgridAdminEmailHandler',
'filters': ['require_debug_false'],
'include_html': True,
}
coredev/utils/logging.py
from django.utils.log import AdminEmailHandler
from coredev.tasks import sendgrid_email
from settings import ADMINS
class SendgridAdminEmailHandler(AdminEmailHandler):
def send_mail(self, subject, message, *args, **kwargs):
for admin in ADMINS:
try:
if kwargs.get('html_message') is not None:
message_content = kwargs['html_message']
else:
message_content = message
sendgrid_email(admin[1], subject, message_content, message)
except:
pass
coredev/tasks.py (отношение сниппет)
import sendgrid
from django.conf import settings
def sendgrid_email(to, subject, body, alt_body, from_email = settings.DEFAULT_FROM_EMAIL, template_id = settings.DEFAULT_TEMPLATE_ID):
sg = sendgrid.SendGridClient(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD, raise_errors = True)
message = sendgrid.Mail()
message.add_filter('templates', 'enable', '1')
message.add_filter('templates', 'template_id', template_id)
message.add_to(to)
message.set_from(from_email)
message.set_subject(subject)
message.set_html(body)
if alt_body:
message.set_text(alt_body)
sg.send(message)
Я просмотрел документацию Django (https://docs.djangoproject.com/en/1.9/topics/logging/), а также StackOverflow и Google, но я не смог найти решение пока. Я понимаю, что модели не нужно импортировать, пока все приложения не будут «готовы», но я не верю, что я импортирую любые модели в этот код, поэтому я не уверен, почему эта ошибка происходит.
Какая часть моего кода вызывает эту проблему? Какие шаги я должен предпринять, чтобы сделать мой пользовательский обработчик ведения журнала совместимым с Django 1.9 AppRegistry; в частности, чтобы я больше не получил ошибку «Приложения еще не загружены»?
Is 'from settings import ADMINS' пытается загрузить' settings.py'? Лучше использовать 'from django.conf параметры импорта', затем' settings.ADMINS'. Вы также можете попытаться перенести импорт этих параметров и «из coredev.tasks импортировать sendgrid_email» в метод 'send_mail', чтобы предотвратить циклический импорт. – Alasdair
Спасибо за ответ, @Alasdair. Я пробовал оба ваших предложения, но, к сожалению, я все еще получаю ту же ошибку. –