rest_framework 源码分析 -----认证组件

rest_framework 源码分析

今天我们来分析一下rest_framework的认证组件源码

  1. python的django也有认证组件 但是呢rest_framework也是有认证组件的 并且比django还方便(个人见解)
  2. 下面我来带大家分析一下认证组件的源码

首先我们再使用认证租金的时候需要先导入认证组件的模块

from rest_framework.authentication import BaseAuthentication  # 这个是限制用户的信息 就是你验证的时候必须要写它里面的方法不然它的方法是返回错误的  所以你 必须要重写 它的方法
from rest_framework.exceptions import AuthenticationFailed  # 这个是你的用户认证出错的时候返回额错误信息 和上面的BaseAuthentication 是一起匹配的

你的下面的定义的类再使用的时候就继承这个BaseAuthentication的时候必须要重写它内部的方法,因为如图所示它内部的方法有两个一个是有用的 一个鸟用没有
rest_framework 源码分析 -----认证组件_第1张图片

第一个方法你看了必须要重写 不然就会抛出一个错误 所以 必须在你继承的时候重写这个方法

rest_framework 源码分析 -----认证组件_第2张图片

然后你再定义的类继承这个模块的时候你的返回的时候是必须要使用这个类名 (authenticate)然后返回的也是规定好的 是一个两个参数的元组

所以它的做用就是限制 限制你的方法必须这样类写 然后返回的也必须是这样

  • 你的类型这样来用是因为编译的时候会自动寻找到这个方法名来进行判断 然后你返回的元组也会由对应的参数来进行取值

  • 你返回的是一个带有两个参数的元组

    • 第一个参数的取值是request.user
    • 第二个参数的取值是request.auth
  • 然后我们在界面中进行认证的使用的时候必须要 在你使用的类中写 authentication_classes = [“你的认证类”] 如果你的类要使用认证组件就必须先写authentication_classes = []这个是源码执行的时候会先找这个

ps 你认证的时候如果是前后端分离的项目 最好是定的 随机字符串来充当cookie这样有助于取值,如果是用cooike获取session你的逻辑就会很麻烦 所以就尽量使用随机字符串来定义你的验证信息

源码执行的流程

  • 1 、所有的源码都是先走APIView中的内容 然后走 dispath方法

rest_framework 源码分析 -----认证组件_第3张图片

  • 2、再执行

  • rest_framework 源码分析 -----认证组件_第4张图片

  • 3、下面就是去你的类中去找authencation_classes这个列表 这就是为什么要在你的需要认证的类中写这个列表 并且把你的类中的这个列表给找到进行验证

  • rest_framework 源码分析 -----认证组件_第5张图片

rest_framework 源码分析 -----认证组件_第6张图片

*authencation_classes = [Authencation] 是你重写的BaseAuthentication 类就是你的认证必须要把认证流程写入这里

如果你的认证要放在全局的时候就可以把配置写在全局中就是你的authencation_classes 这个配置写在全局中就可以设置为所有的类使用了,就是全局配置

你可能感兴趣的:(python源码分析)