django restframework 权限的流程:
当客户请求进来后,会通过dispatch方法,在dispatch中有perform_permissions方法,它主要就是用来做权限验证。要做权限验证,要先获取权限验证的类,它调用get_permissions方法,获取配置的权限的类的并实例化,返回这个实例化对象的列表。再循环执行这些实例化对象的has_permission方法,如果是访问某个具体的对象则是执行has_objects_permission,我们在自定义权限类时,需要重写这两个方法,否则相当于没做权限验证,因为基类中默认返回True.
类似这样指定权限验证的类:
class MyPermission(BasePermission):
def has_object_permission(self, request, view, obj):
"""控制对obj对象的访问权限,此案例决绝所有对对象的访问"""
return False
class BookInfoView(APIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
permission_classes = [MyPermission, ]
它调用的类,方法,以及流程如下: