django restframework学习笔记:认证组件
django restframework学习笔记:认证组件
Riv3n作用
用来用户授权,100个API,1个无需登录即可使用,99个登录才能使用
直接用
编写类 -> 认证组件
继承BasicAuthentication,并且定义authenticate函数
应用认证组件
在视图类里加入 authentication_classes = [MyAuthentication, ]
逗号后面可以加多个认证方法
不需要认证的视图就加authentication_classes = [ ]
全局配置
因为有多个需要验证的视图类,就可以加进全局配置里,就不用每个都写了
注:在drf中,优先先去全局中读取,再去视图类中读取。
(也就是视图类中又定义了就以视图类里定义的为准,会覆盖全局配置)
但是验证组件放进视图里会跟全局起冲突,所以要单独拿出来,然后视图中调用即可
(这里单独定义 ext/auth.py 了)
多个认证类
当前端有不同校验方法从而产生多个认证类的时候
假如所有的认证类都返回了None,但是根据drf的源代码可以知道
视图函数仍然会被执行,只不过 self.user self.auth = None
所以如果是多个认证类,要求有其中一个认证通过才能看视图,都不通过的话不能看视图
那么前面的验证类应该返回
return (验证失败了,也可以不写,默认返回空)
或者
return ‘token’ (验证成功了)
然后到最后一个验证类表示验证失败抛出异常
1 | raise AuthenticationFailed({'code':20000, 'error':"认证失败"}) |
状态码
如果认证类不含authenticate_header方法,会导致状态码异常
为了返回的正确性,验证类要添加
1 | def authenticate_header(self, request): |
子类约束
python里如果有这种方法,约束了子类中必须要定义这个方法(类似于java的接口、抽象类和抽象方法)
1 | class Foo(object): |