Мы можем реализовать custom exception handler function, которая возвращает пользовательский ответ в случае, если объект не существует.
В случае, если объект не существует, Http404
исключение возникает. Итак, мы проверим, было ли поднятое исключение Http404
, и если это так, мы вернем наше специальное сообщение об исключении в ответе.
from rest_framework.views import exception_handler
from django.http import Http404
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
if isinstance(exc, Http404):
custom_response_data = {
'detail': 'This object does not exist.' # custom exception message
}
response.data = custom_response_data # set the custom response data on response object
return response
После определения нашего специального обработчика исключений нам нужно добавить этот настраиваемый обработчик исключений в наши настройки DRF.
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}
Исключение отклоняется в методе get_object() DRF. Я думаю, что у DRF есть свои собственные попытки, кроме блока. есть ли способ, который, если я использую пример try в верхней части этого, как в моем примере, тогда мое исключение получает повышенное, а не DRF. –
Да, исключение 'Http404' возникает в методе' get_object' DRF. Вы можете использовать метод, указанный в ans, и это должно дать вам такое же сообщение об исключении в ответе, как вы хотите. На всякий случай, если вы хотите переопределить функцию 'get_object', вы можете сделать это в своем представлении, переопределив эту функцию. –