gpt4 book ai didi

python - 如何在 Django Rest Framework 中返回 403 错误的数据?

转载 作者:太空狗 更新时间:2023-10-29 20:35:55 25 4
gpt4 key购买 nike

当 GET 请求到达 /obj/1 的 API 后端时

我检查自定义权限类以查看用户是否具有访问权限,如果没有,则返回 403。

但是,我想附加对象 ID,以便用户可以单击前端的按钮来请求访问。

我当前的实现是覆盖 retrieve 方法并在那里“手动”检查权限。

简化的权限

class CustomPerm(...):
def has_object_permission(...):
return request.user.is_staff

View 集

class CustomViewSet(...):
model = Model
permission_classes = (CustomPerm, )

def retrieve(self, request, pk=None):
obj = get_object_or_404(Model, pk=pk)

has_perm = CustomPerm().has_object_permission(request, self, obj=obj)
if not has_perm:
data = { 'id': obj.id }
return Response(data, status=403)

return super(ModelViewSet, self).retrieve(request, pk=pk)

所以我当前的方法 has_perm 返回用户的 QuerySet 而不是权限方法中定义的 bool 值。怎么会?

有更简洁的方法吗?

最佳答案

from rest_framework import permissions
from rest_framework.exceptions import PermissionDenied

class CustomPerm(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.user.is_staff:
return True
raise PermissionDenied({"message":"You don't have permission to access",
"object_id": obj.id})

而且你不需要覆盖retrieve方法

class CustomViewSet(...):
model = Model
permission_classes = (CustomPerm, )

关于python - 如何在 Django Rest Framework 中返回 403 错误的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com