gpt4 book ai didi

Django 错误电子邮件太长。我该如何截断它?

转载 作者:行者123 更新时间:2023-12-02 05:13:17 24 4
gpt4 key购买 nike

Django 1.9 中的错误电子邮件似乎比以前长得多。有一个完整的“设置”部分,我认为这是多余的,而且可能太暴露了。

编辑 Django 发送的错误电子邮件的最佳方法是什么?

编辑:我不仅仅是想隐藏敏感信息。 Django 1.9 中的电子邮件内容较多,我想将电子邮件的格式更改为更短。我喜欢以前的方式。

最佳答案

django debug view 中有一个 django 模板变量 TECHNICAL_500_TEMPLATE/TECHNICAL_500_TEXT_TEMPLATE它控制错误报告中可见的内容,当然还有错误电子邮件。注释解释说模板位于 python 变量中,因此在模板加载器中断时可能会生成错误。您可以在 django 包中更改此变量,但我不建议这样做。 TECHNICAL_500_TEMPLATE 由同一文件中的 ExceptionReporter 类引用。

django utils log 中的 AdminEmailHandler 类然后使用ExceptionReporter生成html错误报告。

您可以子类化 AdminEmailHandler 并重写 emit 函数,以包含使用您自己定义的 TECHNICAL_500_TEMPLATE< 的 ExceptionReporter 子类化版本.

这是一个例子:

使用

创建 reporter.py
from copy import copy

from django.views import debug
from django.utils import log
from django.conf import settings
from django import template

TECHNICAL_500_TEMPLATE = """
# custom template here, copy the original and make adjustments
"""
TECHNICAL_500_TEXT_TEMPLATE = """
# custom template here, copy the original and make adjustments
"""

class CustomExceptionReporter(debug.ExceptionReporter):
def get_traceback_html(self):
t = debug.DEBUG_ENGINE.from_string(TECHNICAL_500_TEMPLATE)
c = template.Context(self.get_traceback_data(), use_l10n=False)
return t.render(c)

def get_traceback_text(self):
t = debug.DEBUG_ENGINE.from_string(TECHNICAL_500_TEXT_TEMPLATE)
c = template.Context(self.get_traceback_data(), autoescape=False, use_l10n=False)
return t.render(c)

class CustomAdminEmailHandler(log.AdminEmailHandler):
def emit(self, record):
try:
request = record.request
subject = '%s (%s IP): %s' % (
record.levelname,
('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
else 'EXTERNAL'),
record.getMessage()
)
except Exception:
subject = '%s: %s' % (
record.levelname,
record.getMessage()
)
request = None
subject = self.format_subject(subject)

no_exc_record = copy(record)
no_exc_record.exc_info = None
no_exc_record.exc_text = None

if record.exc_info:
exc_info = record.exc_info
else:
exc_info = (None, record.getMessage(), None)

reporter = CustomExceptionReporter(request, is_email=True, *exc_info)
message = "%s\n\n%s" % (self.format(no_exc_record), reporter.get_traceback_text())
html_message = reporter.get_traceback_html() if self.include_html else None
self.send_mail(subject, message, fail_silently=True, html_message=html_message)

然后只需将 django 设置设置为使用 logging section 中的新处理程序即可.

LOGGING = {
# Your other logging settings
# ...
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'project.reporter.CustomAdminEmailHandler',
'filters': ['special']
}
},
}

如果您只想隐藏设置,则可以注释掉 'settings': get_safe_settings(), 第 294 行,如果您覆盖并复制粘贴 def get_traceback_data(self): code> 在您的 CustomExceptionReporter

关于Django 错误电子邮件太长。我该如何截断它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165790/

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