Как настроить ответ на ошибку проверки в Django REST Framework?Python

Программы на Python
Anonymous
Как настроить ответ на ошибку проверки в Django REST Framework?

Сообщение Anonymous »

Я разрабатываю RESTful API с использованием Django REST Framework (DRF), и мне нужно реализовать общий механизм обработки ошибок для различных ошибок проверки, возникающих во всем приложении, включая, помимо прочего, сбои аутентификации JWT.при возникновении ошибок проверки DRF возвращает ответы об ошибках по умолчанию, которые могут быть неудобными или несогласованными для разных конечных точек. Например, ошибка проверки токена JWT выдает ответ, который выглядит следующим образом:

Код: Выделить всё

{
"detail": "Given token not valid for any token type",
"code": "token_not_valid",
"messages": [
{
"token_class": "AccessToken",
"token_type": "access",
"message": "Token is invalid or expired"
}
]
}
Я хотел бы стандартизировать ответы на ошибки во всем приложении, чтобы улучшить взаимодействие с пользователем. В частности, я хочу создать общую функцию, которая может возвращать структурированный ответ для всех ошибок проверки в следующем формате:

Код: Выделить всё

{
"status": false,
"responseCode": 0,
"message": "Validation ",
"data": {}
}
Я попробовал, создав custom_Exception_handler

Код: Выделить всё

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

if response is not None:
custom_response_data = {
'status': False,
'responseCode': 0,
'message': 'Validation error',
'data': {}
}

if isinstance(response.data, dict):
errors = {}
for field, detail in response.data.items():
if isinstance(detail, list):
errors[field] = detail[0] if detail else 'Invalid input.'
elif isinstance(detail, dict):
errors[field] = " | ".join(str(v) for v in detail.values())
else:
errors[field] = str(detail)

custom_response_data['message'] = " | ".join(errors.values())
custom_response_data['data'] = errors

response.data = custom_response_data
return response
Но это не дает того, что я хочу

Подробнее здесь: https://stackoverflow.com/questions/790 ... -framework

Вернуться в «Python»