- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 Django-rest-framework 中的 BasePermission
感到困惑。
这里我定义了一个类:IsAuthenticatedAndOwner
。
class IsAuthenticatedAndOwner(BasePermission):
message = 'You must be the owner of this object.'
def has_permission(self, request, view):
print('called')
return False
def has_object_permission(self, request, view, obj):
# return obj.user == request.user
return False
在 views.py
中使用
class StudentUpdateAPIView(RetrieveUpdateAPIView):
serializer_class = StudentCreateUpdateSerializer
queryset = Student.objects.all()
lookup_field = 'pk'
permissions_classes = [IsAuthenticatedAndOwner]
但它根本不起作用。每个人都可以通过权限并更新数据。
未打印调用的
。
我曾经定义过这个类:IsNotAuthenticated
class IsNotAuthenticated(BasePermission):
message = 'You are already logged in.'
def has_permission(self, request, view):
return not request.user.is_authenticated()
在功能上效果很好
class UserCreateAPIView(CreateAPIView):
serializer_class = UserCreateSerializer
queryset = User.objects.all()
permission_classes = [IsNotAuthenticated]
那么,上面的例子和函数has_object_permission
& has_permission
有什么区别?
最佳答案
我们在 BasePermission
类上有以下两种权限方法:
def has_permission(self, request, view)
def has_object_permission(self, request, view, obj)
这两种不同的方法被要求限制未经授权的用户进行数据插入和操作。
has_permission
在所有 HTTP 请求上调用,而 has_object_permission
从 DRF 的方法 def get_object(self)
调用。因此,has_object_permission
方法可用于 GET
、PUT
、DELETE
,不适用于 POST
请求。
总结:
permission_classes
在定义的列表上循环。has_object_permission
方法在 has_permission
方法返回值 True
后调用,除了在 POST 方法中(仅在 POST
方法中has_permission
被执行)。permission_classes
方法返回一个 False
值时,请求没有权限,不会再循环,否则,它会检查循环的所有权限。<has_permission
方法将在所有 (GET
, POST
, PUT
, DELETE
) HTTP
请求。has_object_permission
方法不会在 HTTP POST
请求中被调用,因此我们需要从 has_permission
方法中限制它。关于django - has_object_permission 和 has_permission 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064417/
我查看了关于同一主题的类似问题,我认为我遵循了为 has_object_permission 指定的所有规则。 . 这就是我在我的设置中所拥有的。 REST_FRAMEWORK = {
我正在尝试限制用户对对象的访问。只有创建者才能修改对象。为此目的,就像他们在我写的教程中所说的那样 class IsOwnerOrReadOnly(permissions.BasePermission
我有一个用于 API POST /api/samples/sample_id/check 的 View 集 SampleViewSet。我已经为它定义了对象级权限。 class SamplePermi
我对 Django-rest-framework 中的 BasePermission 感到困惑。 这里我定义了一个类:IsAuthenticatedAndOwner。 class IsAuthenti
我已经尝试了将近一整天的时间来解决这个问题,但我似乎无法弄清楚为什么 has_object_permission method ListCreateAPIView 时不调用在 DRF 中被调用.我已经
大家好我想在我的类UserDetail中使用APIView的自定义权限但是我注意到这个权限没有执行,我的权限叫做“IsOwner”,因为我想允许用户根据用户身份。每次我发出请求时,我都会收到错误消
我是一名优秀的程序员,十分优秀!