是否可以将 Django 的 SafeExceptionReporterFilter 与 AdminEmailHandler 以外的其他东西一起使用?

Is it possible to use Django's SafeExceptionReporterFilter with something else than the AdminEmailHandler?

我正在尝试使用 Django 的 @sensitive_post_parameters 过滤掉敏感信息。我认为将这些注释放在几个特定函数的前面就足够了,但它不起作用。我在 SafeExceptionReporterFilter 内设置了断点,它仅在从 AdminEmailHandler 而不是 其他处理程序调用时中断。我错过了什么?

您可以编写一个使用 django.views.debug.ExceptionReporter 格式化异常的自定义 Handler

ExceptionReporter 的使用示例:

from django.views.debug import ExceptionReporter

# exc_type, exc_value, traceback are a standard exception
# tuple as returned by sys.exc_info
reporter = ExceptionReporter(request, exc_type, exc_value, traceback)
html_report = reporter.get_traceback_html()
text_report = reporter.get_traceback_text()

ExceptionReporter 将使用 DEFAULT_EXCEPTION_REPORTER_FILTER 设置定义的 ExceptionReporterFilter,默认情况下为 SafeExceptionReporterFilter.

查看 AdminEmailHandlerimplementation 以获取有关如何创建自定义 Handler 的信息。

即使您使用 SafeExceptionReporterFilter,异常仍将包含敏感数据(例如您服务器的 ENV 变量和其他运行时数据)。

为避免泄露敏感数据,您不应使用此过滤器。相反,编写您自己的异常处理程序中间件并有选择地(递归地?)在日志中获取您想要的数据。

请参阅 sys.exc_info 了解如何获取异常的回溯以及如何根据您的需要使用它。

即使您使用 CustomHandler,您也会受到特定处理程序的限制,据我所知,第三方处理程序不会使用 SafeExceptionReporterFilter