DRF: пользовательское разрешение отклонено
Как изменить стандартное сообщение DRF-Permission Denied с {"detail":"You do not have permission to perform this action."}
что-то вроде этого,{"status": False, "message": "You do not have permission to perform this action."}
Я нашел этот ТАК Ответ, но это не помогает изменить Key
для message
2 ответа
Решение
Чтобы включить статус в ответ об ошибке, вы можете написать пользовательский error handler
:
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response.status_code == 403:
response.data = {'status': False, 'message': response.data['detail']}
return response
В настройках:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER':
'my_project.my_app.utils.custom_exception_handler'
}
Вы можете создать собственное разрешение, расширив BasePermission
класс и использовать пользовательское исключение с пользовательским status_code
а также default_detail
использовать в этом пользовательском разрешении.
class CustomForbidden(APIException):
status_code = status.HTTP_403_FORBIDDEN
default_detail = "custom error message"
class CustomPermission(permissions.BasePermission):
def has_permission(self, request, view):
if not_allowed:
raise CustomForbidden