raise PermissionDenied 中的自定义消息在 Django rest 中不起作用
custom message in raise PermissionDenied not working in Django rest
我在自定义权限函数中尝试 raise PermissionDenied("Anonymous user") 但我写的消息没有显示在 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
在上面的代码中我到达了这里(“我在这里”)但是匿名用户没有打印而是显示默认消息。
您可以更改消息中的错误消息 属性:
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
是您在权限中声明的属性 class。
您可以使用它,甚至传递另一条消息:
from rest_framework.exceptions import PermissionDenied
class YourView(...):
permission_classes = [CustomerAccessPermission]
def permission_denied(self, request, message=None, code=None):
raise PermissionDenied(message)
我在自定义权限函数中尝试 raise PermissionDenied("Anonymous user") 但我写的消息没有显示在 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
在上面的代码中我到达了这里(“我在这里”)但是匿名用户没有打印而是显示默认消息。
您可以更改消息中的错误消息 属性:
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
是您在权限中声明的属性 class。
您可以使用它,甚至传递另一条消息:
from rest_framework.exceptions import PermissionDenied
class YourView(...):
permission_classes = [CustomerAccessPermission]
def permission_denied(self, request, message=None, code=None):
raise PermissionDenied(message)