简明python教程之Python 优雅的操作字典(python使用教程)
284
2022-08-15
Django restframework用户登录认证组件增加及源码分析(django自带的数据库)
用户登录验证源码剖析,注意:一定要跟着博主的解说再看代码的中文注释及其下面的一行代码!!!
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、在方法中先封装了原生的request对象,我们可以点进去查看新的request在原来的request的改进之处:先是封装了原生的request对象,然后又加了用户登录验证的“类”,现在慢慢进入了主题。以下添加APIView类的部分代码,也就是新的request对象用到的代码。
5、这个类中的self也是请求视图类的对象,如果self(请求试图类的对象)没有authentication_classes变量就会使用全局的配置文件中寻找,就是settings.py文件需要添加一个字典REST_FRAMEWORK={"DEFAULT_AUTHENTICATION_CLASSES":["类的全路径"]}类似的。这里我们假设全局配置文件中已有用户登录验证类或者我们自定义的用户登录验证类并且添加进去了。执行完下面的代码,我们上面的APIView.dispatch()方法中的self.request已经变成了新的request对象,我们接着往下看。
5、这就到了我们的用户登录验证的戏码了。我们可以查看代码中的self.perform_authentication(request),里面就是一行代码request.user(这里我不添加了),我们可以直接点进去这个user方法的实现,这里直接添上Request类的部分代码,也就是user相关的代码。这里直接点user是因为在user方法上添加了@property注解
6、在Request类中会执行到user_auth_tuple = authenticator.authenticate(self),这个authenticator就是我们全局配置的用户登录类或者是请求视图类的authentication_classes变量列表元素的对象,执行里面的authenticate方法,我们可以直接点进去查看authenticate方法。一般我们自定义这个用户登录验证类的话我们一般需要继承BaseAuthentication类,这样我们直接重写authenticate方法,里面的需求就是验证时候登录携带了token信息或者session信息又或者前后端定义的标准信息(只要是能识别用户登录了的信息即可)。像这样我们可以自定义一个微信验证登录、QQ验证登录、支付宝验证登录的类(这只是我的设想)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~