Django DRF认证组件的流程是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
视图函数中加上认证功能,流程见下图
进口hashlib 导入的时间 def get_random(名称): md=hashlib.md5 () md.update(字节(str (time.time()),编码=& # 39;utf - 8 # 39;)) md.update(字节(名称、编码=& # 39;utf - 8 # 39;)) 返回md.hexdigest () 从rest_framework。视图导入APIView 类登录(APIView): authentication_classes=[AuthLogin] def post(自我,请求,* args, * * kwargs): 响应={& # 39;状态# 39;:100 & # 39;味精# 39;:没有} name=request.data.get(& # 39;名字# 39;) pwd=request.data.get (& # 39; pwd # 39;) 用户=models.User.objects。过滤器(name=名、密码=pwd)当代() 如果用户: 响应[& # 39;味精# 39;]=& # 39;登陆成功& # 39; #随机字符串可以是用户名加当前时间生成的mds 令牌=get_random(名称) #如果有记录,就只需要更新,不需要重新插入 # models.UserToken.objects.create(令牌=令牌、用户=用户) #查询更新 # user_agent models.UserToken.objects。update_or_create(用户=用户,默认={& # 39;标记# 39;:令牌}) 响应[& # 39;标记# 39;]=令牌 其他: 响应[& # 39;状态# 39;]=101 响应[& # 39;味精# 39;]=& # 39;用户名或密码错误& # 39; 返回响应(响应)
。权限导入BasePermission 从rest_framework。异常进口NotAuthenticated 从app01导入模型 # BaseAuthentication 类AuthLogin (BaseAuthentication): def(自我,请求进行身份验证): #封装后的请求 令牌=request.GET.get(& # 39;标记# 39;) #打印(令牌) ret=models.UserToken.objects.filter(令牌=令牌)当代() 如果延迟: 返回ret.user,令牌 其他: 提高NotAuthenticated(& # 39;您没有登陆& # 39;)
在def初始(自我,请求,* args, * * kwargs):函数中找到认证功能
流程总结:
- <李>派遣方法里self.initial里面有个认证组件self.perform_authentication(请求)李> <李>到了APIview返回了请求。用户(封装后的请求)李> <李>去请求类里找用户方法,被包装成了属性,里面执行了一个方法,self._authticate方法李> <李> self._authticate方法里从自己的身份验证器一个一个的取东西,身份验证器李> <李>于是查看身份验证器,是初始化的时候init传过来了,自我。李的身份验证器=身份验证器或()> <李>到调度里找初始化的时候,也就是APIView的initialize_request方法传了self.authenticators,里面是一个get_authenticators的方法李> <李>自我。authentication_classes是[类1类2类3]一个一个取,加括号执行。生成一个一个对象。最后返回到前面的请求的_authenticate方法李> <>李拿到对象之后,执行user_auth_tuple=authenticator.authenticate(自我)李> <李>注意验证是需要在视图函数中自己定义的,自我。用户自我。auth=user_auth_tuple返回两个值,流程结束。李>
感谢各位的阅读!看完上述内容,你们对Django DRF认证组件的流程是什么大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。