Обработчик исключений по умолчанию для класса APIView
определяется методом get_exception_handler
. Т.е.,
def get_exception_handler(self):
"""
Returns the exception handler that this view uses.
"""
return self.settings.EXCEPTION_HANDLER
Другими словами, функция-обработчик, используемая классом APIView
по умолчанию, равна rest_framework.views.exception_handler
(которая указана в default settings
).
Согласно документу DRF
По умолчанию DRF обрабатывает структуру REST APIException
, и
также в Django встроены Http404
и PermissionDenied
исключения.
Поскольку в этом случае вы хотите настроить сообщение об ошибке только для Http404
, вы можете создать свой собственный обработчик, подобный этому.
е
from rest_framework.views import exception_handler
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)
# Now overide the error message.
if response is not None and isinstance(exc, Http404):
# set the custom message data on response object
response.data['detail'] = exc.args[0] # exc.args[0] will have the message text,
return response
Затем поместите этот пользовательский обработчик в настройки вашего проекта.
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}
Примечание: Это решение не тестировалось.