Пользовательское исключение Django для возврата 503 и игнорирования отправки почты администратора

Я хочу вызвать пользовательское исключение, которое будет:

  • возвращать статус 503
  • не отправляйте email администратора django

Я могу сделать одно из них, но не оба вместе

  • возврат 503: использование drf ApiException или пользовательского обработчика исключений для обработки ответа, но я не получу тип исключения в записи электронной почты для фильтрации

    .
  • не отправлять электронную почту: проверка типа исключения в пользовательском классе обработчика электронной почты, но это возвращает 500

    .

Присоедините exc_info к request в CustomMiddleware и обратитесь к нему в CustomAdminEmailHandler.

class CustomMiddleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        if isinstance(exception, MyCustomException):
            # For CustomAdminEmailHandler      # Add this
            request.exc_info = sys.exc_info()  # Add this
            return JsonResponse({"detail": "Error try later"}, status=503)
class CustomAdminEmailHandler(log.AdminEmailHandler):
    def emit(self, record):
        request = record.request
        if record.exc_info:
            exc_info = record.exc_info
        elif hasattr(request, 'exc_info'):  # Add this
            # From CustomMiddleware         # Add this
            exc_info = request.exc_info     # Add this
        else:
            exc_info = (None, record.getMessage(), None)
        reporter = ExceptionReporter(request, is_email=True, *exc_info)
        if reporter.exc_type and issubclass(reporter.exc_type, MyCustomException):
            return
Вернуться на верх