Пользовательское исключение 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