【Python web 开发】django rest framwork 的token 登录和原理(2),,django res
【Python web 开发】django rest framwork 的token 登录和原理(2),,django res
django rest framwork api guid 关于认证的有这么多种方式
先看默认的authentication api guid
REST_FRAMWORK:{}是整个django rest framwork 整个的变量配置中心
SessionAuthentication实际上是使用了django里面的sessionMiddleware
每当一个request 进来的时候,这两个meddleware就会将我们的cookie里的session_id转换成request.user
rest_framework/authentication.py源码解读:
其中的antuenticate 就是从我们的request中取出的user,实际上还依赖的是我们django 自带的session 机制
django rest framwork 给我们提供了三种不同的认证模式
sessionAuthentication 常用的是浏览器当中,因为浏览器会自动的设置cookie。并将cookie和session带到我们的服务器当中,所以前后端分离的系统我们很少用到这种。
重点是tokenAuthentication
下面我们来介绍下 tokenAuthentication
ps: 所有有表的app 都要添加到 install_apps 里面 来,不然migration 的时候会报错,不会帮我们生成数据库表的
添加apps 后,接下来我们进行migration migrate ,进入数据库我们看到生成了一张authtokne_token 的表
这里面的 user_id 是一个外键,是指向到我们的userprofile 里面的
然后再来配置url (这个主要是生成token的一个url)
接下来我们就用postman 模拟请求这个url
这样我们就生成一个token了
下一步,怎么拿到token?
加一行
断点调试,是可以获取到用户的user 信息的
request.data 中存放着用户从前端post 过来的数据,request只将post和field中的东西放在我们的data中
head中设置的token 会被放进request auth 中
想要知道用户传递过来的auth 时只需要request.auth
django源码中的sessionMiddleware中有一个process_request方法
和一个process_response方法。
django/contrib/sessions/middleware.py:
setting中注册的middleware会将用户request的数据经过这些middlware中有process_request方法和process_response方法注册进入。
当用户的request进入view之前会将这些process_request通通调用一遍
如果用户post过来的是session_id那么我们的session middleware就会起作用。
会执行上面代码从request.cookies中获取到setting中设置的SESSION_COOKIE_NAME
这里仅仅是完成了把session放入request。
这里的middleware和scrapy中的middlware是一样的、
在setting 里面注册的middleware 都可以重载Process_request 和process_response 这两个方法
当用户提交的quest 在请求view 之前全部都加载一遍
【Python web 开发】django rest framwork 的token 登录和原理(2)
评论关闭