【发布时间】:2021-02-08 12:29:25
【问题描述】:
我正在为我的一个视图创建自定义 Django Rest Framework 权限,我只希望管理员和对象的所有者能够查看和编辑对象,因为其他人都会返回异常错误。但如果 request.user 不是管理员或对象的所有者,我无法获得返回错误的自定义权限。
目前我在我的view.py
class ItemQuery(generics.RetrieveUpdateDestroyAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
permission_classes = [IsOwnerOrReadOnly]
lookup_field = 'name'
还有我的permissions.py
from rest_framework.views import exception_handler
class IsOwnerOrReadOnly(permissions.basePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
if obj.id.user = request.user or request.user.is_admin == True:
return True
else:
return False
response = exception-handler(self, request)
response.status_code = 404
return response
【问题讨论】:
-
删除最后几行,因为它们在 return False 语句之后永远不会执行。此外,权限类应该只返回 true 或 false 而不是 HTTP 响应。这是由视图完成的。您能否以非所有者的身份提出请求后显示您收到的响应?从您的代码来看,它应该适用于 POST 和其他不安全的方法
标签: python django django-rest-framework