【问题标题】:Django REST Framework - Return error if not allowed to view object not working?Django REST Framework - 如果不允许查看对象不工作返回错误?
【发布时间】: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


【解决方案1】:

删除

if request.method in permissions.SAFE_METHODS:
    return True

它会在你检查是所有者还是管理员之前返回。

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2014-09-03
    • 2017-02-02
    • 2015-04-23
    • 2018-07-31
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多