exception_handler: add codes for Http404 and PermissionDenied by blueyed · Pull Request #5379 · encode/django-rest-framework (original) (raw)
Yes, it is meant to provide a canonical response in case of errors.
We're also using a modified version of the first case because of this:
if isinstance(exc, exceptions.APIException):
headers = {}
if getattr(exc, 'auth_header', None):
headers['WWW-Authenticate'] = exc.auth_header
if getattr(exc, 'wait', None):
headers['Retry-After'] = '%d' % exc.wait
details = exc.get_full_details()
if 'message' in details:
data = {'detail': {'non_field_errors': [details]}}
else:
data = {'detail': details}
set_rollback()
return Response(data, status=exc.status_code, headers=headers)
So instead of
if isinstance(exc.detail, (list, dict)):
data = exc.detail
else:
data = {'detail': exc.detail}
we have
details = exc.get_full_details()
if 'message' in details:
data = {'detail': {'non_field_errors': [details]}}
else:
data = {'detail': details}