Пользовательское сообщение в raise PermissionDenied не работает в Django rest

Я попытался вызвать PermissionDenied("Анонимный пользователь") внутри пользовательской функции разрешения, но сообщение, которое я написал, не отображается в ответе api. Вместо этого отображается стандартное запрещенное сообщение, которое гласит у вас нет разрешения на выполнение этого действия

Мой фрагмент здесь:

class CustomPermission(BasePermission):
    """
        returns permission based on the request method and slug
    """

    def has_permission(self, request,view):
        slug = request.resolver_match.kwargs["slug"]
        if slug is not None and request.method == 'POST':
            if slug == "abc":
                user = request.user
                if user.is_staff:
                    return True
                if user.is_anonymous:
                    print("iam here")
                    raise PermissionDenied("Anonymous user")
            elif slug == "mnp":
                return True
        else:
            return True

Здесь в приведенном выше коде я дошел до ("iam here"), но анонимный пользователь не печатает, а показывает сообщение по умолчанию.

Вы можете изменить сообщение об ошибке в свойстве message:

from rest_framework import permissions


class CustomerAccessPermission(permissions.BasePermission):
    message = 'Your message'

    def has_permission(self, request, view): 
        ... # return True or False

Документы в : https://www.django-rest-framework.org/api-guide/permissions/#custom-permissions

После этого в вашем представлении будет вызвана функция permission_denied(self, request, message=None, code=None), которая message является атрибутом, объявленным в вашем классе разрешения.

Вы можете использовать это, или даже передать другое сообщение:

from rest_framework.exceptions import PermissionDenied


class YourView(...):
    permission_classes = [CustomerAccessPermission]

    def permission_denied(self, request, message=None, code=None):
        raise PermissionDenied(message)
Вернуться на верх