rest-framework权限中has_permission和has_object_permissions

先看视图对queryset的处理

在GenericAPIView中,有以下方法get_queryset,filter_queryset, get_object, 其中:
get_queryset就是获取当前的查询集,
filter_queryset根据filter_backends进行过滤,
get_object是根据参数获取过滤集的单个对象:调用的是get_object_or_404方法, 不需要提供查询集,因为他使用的是过滤集,本质是QuerySet对象的get()方法

在ListModelMixin中,也就是查询多个的时候,要获取查询集,使用的是filter_queryset,返回

在RetrieveModelMixin中,查询单个对象,使用的是get_object方法,返回


区别

has_permission在请求进来的时候就开始了属于DRF的三大认证,返回True就能访问,False就禁止访问
has_object_permissions是对某个对象的访问权限,默认是True


可以根据request对象和obj对象判断:该对象是否可以返回给该request请求,返回True或者False。

  • 调用的时机:在get_object方法中调用


你可能感兴趣的:(rest-framework权限中has_permission和has_object_permissions)