Глобальная обработка исключений в Django -rest-framework - PullRequest
2 голосов
/ 27 февраля 2020

Есть ли способ обработать все исключения глобально, не используя блок try-Кроме в django rest Framework.

Я хочу преобразовать html страницу ошибки, которую django выбрасывает в пользовательский json ответ объекта.

Я создал файл exception.py в своем приложении

def custom_exception_handler(exc, context=None):
response = exception_handler(exc)


if isinstance(exc, HttpResponseServerError):  
    custom_response_data = { 
        'detail': 'Internal Server Error' # custom exception message
    }
    response.data = custom_response_data

return response

Я настроил это в settings.py.

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'EXCEPTION_HANDLER':'my_project.my_app.exceptions.custom_exception_handler'}

1 Ответ

0 голосов
/ 28 февраля 2020

Определенный ответ на ваш вопрос: нет .

По крайней мере, я не знаю, как это сделать глобально в Django, тогда как global включает исключения промежуточного программного обеспечения).

Кроме того, в соответствии с запросом @Shubham Kumar вам понадобится ловушка process_exception и для проверки реализации этот пост SO с официальными документами о том, как его активировать . Как указано в Django документах:

запрос является объектом HttpRequest. исключение - это объект Exception, возбуждаемый функцией представления.

Django вызывает process_exception (), когда представление вызывает исключение. process_exception () должен возвращать None или объект HttpResponse. Если он возвращает объект HttpResponse, будет применено промежуточное программное обеспечение ответа и шаблона, а полученный ответ будет возвращен браузеру. В противном случае начинается обработка исключений по умолчанию.

Опять же, промежуточное программное обеспечение запускается в обратном порядке на этапе ответа, который включает исключение process_exception. Если промежуточное программное обеспечение исключения возвращает ответ, методы process_exception классов промежуточного программного обеспечения выше этого промежуточного программного обеспечения вообще не будут вызываться.

Это означает, что вы просто сможете подключиться к представлению функция и перехватить все эти исключения.

...