Django error reporting通过发送邮箱来处理未捕获的异常,并且(可选)向用户显示一个漂亮的500错误页面.
这非常有效,但在少数情况下,我希望允许用户不受干扰地继续他们的业务,但仍然让Django向我发送有关该异常的邮箱错误报告.
所以基本上:我能手动发送邮箱错误报告,即使我捕捉到了异常吗?
当然,我希望避免手动生成错误报告邮箱.
Django error reporting通过发送邮箱来处理未捕获的异常,并且(可选)向用户显示一个漂亮的500错误页面.
这非常有效,但在少数情况下,我希望允许用户不受干扰地继续他们的业务,但仍然让Django向我发送有关该异常的邮箱错误报告.
所以基本上:我能手动发送邮箱错误报告,即使我捕捉到了异常吗?
当然,我希望避免手动生成错误报告邮箱.
您可以使用以下代码手动发送有关request
和异常e
的邮箱:
import sys
import traceback
from django.core import mail
from django.views.debug import ExceptionReporter
def send_manually_exception_email(request, e):
exc_info = sys.exc_info()
reporter = ExceptionReporter(request, is_email=True, *exc_info)
subject = e.message.replace('\n', '\\n').replace('\r', '\\r')[:989]
message = "%s\n\n%s" % (
'\n'.join(traceback.format_exception(*exc_info)),
reporter.filter.get_request_repr(request)
)
mail.mail_admins(
subject, message, fail_silently=True,
html_message=reporter.get_traceback_html()
)
您可以在如下所示的视图中测试它:
def test_view(request):
try:
raise Exception
except Exception as e:
send_manually_exception_email(request, e)