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
Другие вопросы по тегам