python - Django 1.9 自定义日志记录处理程序类 : "Unable to configure handler ' mail_admins': Apps aren't loaded yet.“

标签 python django django-1.9

我正在将现有的 Django 应用程序从 1.8 升级到 1.9(特别是 1.9.4)。我使用自定义日志记录处理程序通过第三方电子邮件提供商 (SendGrid) 发送管理员错误电子邮件。

当执行 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 兼容;具体来说,这样我就不会再收到“应用程序尚未加载”错误?

最佳答案

我遇到了类似的问题。我能够通过在导入任何其他内容之前导入设置来解决它。另外,请听取@Alasdair 的建议。

from django.conf import settings
from django.utils.log import AdminEmailHandler
from coredev.tasks import sendgrid_email

class SendgridAdminEmailHandler(AdminEmailHandler):
    def send_mail(self, subject, message, *args, **kwargs):
        for admin in settings.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

关于python - Django 1.9 自定义日志记录处理程序类 : "Unable to configure handler ' mail_admins': Apps aren't loaded yet.“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338206/

相关文章:

python - Prettyplotlib 条形图中的条形顺序

Python - Tkinter 标签中多变量句子中一个变量的文本颜色

Django Apache 和 Virtualenv ImportError : No module named site

python - 在 Django PermissionDenied 中发送自定义消息

django - 仅对用户语言使用 cookie,而不是打开 session

django - Django TextField和CharField正在剥离空格和空白行

python - 如果其中一个线程先结束,则结束python多线程

python - Discord 自机器人 : Direct messaging a user when joining a server/guild

python - Django Booleanfiedl Checkbox 和 Label 显示为两行

数据库中的Django默认值