Django restframework用户权限认证组件增加及源码分析(django自带的数据库)

网友投稿 290 2022-06-22


用户权限验证源码剖析,和用户登录验证有点相似,但是为了增加记忆,有必要再一次添加,

注意:一定要跟着博主的解说再看代码的中文注释及其下面的一行代码!!!

1、准备一个路由和视图类,全局路由配置暂时忽略,当流程执行到下面的url:groupsSelectAll——> GroupsView的视图类下的as_view()方法

2、但是GroupsView类下没有as_view方法,这时就要去它的父类APIView查看(点进去看as_view方法),这里博主只复制方法源代码,大家只需要看中文注释及其下的代码语句。在这个方法中值得一提的是super关键字,如果请求视图类(就是GroupsView类,如果继承了多个父类)还有另一个父类,它先会查看这个父类是否有as_view方法。在这里它是会执行APIView的父类View中的as_view方法,然后我们再次查看父类View的as_view方法。第一个as_view方法是APIView类的,第二个as_view方法是View类的。

3、我们在第二个as_view方法中可以知道self是我们的请求视图类的对象,通过这个self调用dispatch方法,请求视图类中没有dispatch方法,是不是又去APIView类中执行dispatch方法。

4、其他代码不用看,我们直接看initial方法,因为这个initial方法有权限验证的功能。

5、这就到了我们的用户权限验证的戏码了。博主添加APIView部分代码,即check_permission方法用到的代码。我们可以查看代码中的self.check_permissions(request),点进去查看check_permissions()方法,可以看到有get_permissions方法,这个方法有self.permission_classes变量,即self.permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES,然后这里也和【上一篇的用户登录验证】很相似,就是请求视图类中如果没有这个变量名及值(值是一个列表),就会使用全局配置文件中的REST_FRAMEWORK={"DEFAULT_PERMISSION_CLASSES":["权限验证类的全路径"]},或者我们在请求视图类中添加这个变量及值

6、在上面的APIView类中会执行到if not permission.has_permission(request, self),我们可以直接点进去查看has_permission方法。一般我们自定义这个用户权限验证类的话我们一般需要继承BasePermission类,这样我们直接重写has_permission方法,里面的需求就是验证时候当前登录的用户是否具有某个模块的权限。像这样我们可以自定义一个只有充值称为VIP或者SVIP用户访问权限的类(这只是我的设想)


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django restframework用户登录认证组件增加及源码分析(django连接mysql数据库)
下一篇:深度学习-卷积(卷积 深度)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~