Пользовательское сообщение в 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)