【发布时间】:2017-08-21 05:22:15
【问题描述】:
我对 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]
但它根本不起作用。每个人都可以通过权限并更新数据。
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有什么区别呢?
【问题讨论】:
标签: django django-rest-framework django-rest-framework-permissions