【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)

评论关闭