08 认证、权限、频率控制组件
1、认证组件介绍
2、认证类源码流程
1、自己创建一个认证类,并实现authenticate方法,返回一个元组
2、在配置文件或试图函数下进行配置
setting下配置,全局验证
在试图函数下配置,只对该试图函数生效
3、框架提供认证模块
rest_framework\authentication.py
4、权限组件
权限组件的初始化虽然是在验证后,但是任然会走一遍
1、在setting中配置DEFAULT_PERMISSION_CLASSES=[]是全局配置,认证和权限一般都在视图下配置
2、自定义权限类,并写方法
3、在需要验证权限的类中添加permission_classes=[]配置
5、框架提供的权限组件
6、自定义实现限流类
限流类在认证和权限之后执行,前面组件认证不过,不会走到频率控制类
import time from rest_framework.throttling import BaseThrottle VISIT_RECORD={} class MyThrottle(BaseException): def __init__(self): self.history=None def allow_request(self,request,view): #实现限流逻辑,通过返回True,不通过返回False #以IP限流 #访问列表 now = time.time() ip=request.META.get("REMOTE_ADDR") if ip not in VISIT_RECORD: VISIT_RECORD[ip]=[now,] return True history=VISIT_RECORD[ip] # 将最新时间放在第一位,后面可直接pop旧值 history.insert(0,now) # 确保最新和最老的时间差为1分钟 while history and history[0]-history[-1]>60: history.pop() self.history=history # 判断history的长度,大于3次标示限流 if len(history)>3: return False return True def wait(self): #返回需要再等待的时间 white_time=60-(self.history[0]-self.history[-1]) return white_time
在试图函数中配置
访问达到频率控制会给出提示
7、框架实现限流
{'s': 1, 'm': 60, 'h': 3600, 'd': 86400}
1、配置限流类
2、在setting下配置
测试