我对Django-rest-framework中的BasePermission
感到困惑。DRF中的has_object_permission和has_permission之间有什么区别:权限?
这里我定义了一个类: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]
使用不过,这并不在all.Everyone工作可以通过许可和更新数据。 called
未打印。
,我用定义这个类: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
?
感谢您的回答。也许我的问题不清楚。首先,我的代码与您的代码一样。但它没有工作,每个人都可以通过权限。然后我通过'return False'更新函数。它仍然通过每个人。 –