【发布时间】:2021-11-11 05:59:52
【问题描述】:
我想提出一个自定义异常,它将:
- 返回 503 状态
- 不发送 Django 管理员电子邮件
我可以做其中之一,但不能同时做:
- 返回 503 状态:通过使用 DRF APIException 或自定义异常处理程序来处理响应,但我不会获取日志记录中的异常类型进行过滤。
- 不发送电子邮件:通过检查自定义电子邮件处理程序类中的异常类型,但这会返回 500。
通过添加自定义中间件处理 503 的代码示例:
class CustomMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
if isinstance(exception, MyCustomException):
return JsonResponse({"detail": "Error try later"}, status=503)
不发送电子邮件的代码示例:
class CustomAdminEmailHandler(AdminEmailHandler):
def emit(self, record):
...
reporter = ExceptionReporter(request, is_email=True, *exc_info)
if reporter.exc_type and issubclass(reporter.exc_type, MyCustomException):
return
Django 为任何 5xx 状态响应发送电子邮件。当我使用中间件时,我无法过滤 reporter.exc_type,因为在 process_exception 中处理了异常,因此不再有异常跟踪 (exc_info)。
【问题讨论】:
标签: django exception django-rest-framework