1,DRF的认证
- 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一标识和在服务器中的标识做匹配,成功就通过,不成功就不通过.
- 认证的使用,见下图:
1.2, DRF的相关代码:




2,DRF权限
- 和django的全下类似,restframeworke也是给某一些用户添加角色,通过给不同的角色分配不同的权限,
- 源码分析如下:
说明:因为python代码是一行一行执行的,所以先是认证,然后是权限,在是频率,按这个顺序执行代码.
权限代码如下:


REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
# 配置全局认证
# 'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
# 配置全局权限
"DEFAULT_PERMISSION_CLASSES": ["BROP.utils.MyPermission"]
}
3,DRF频率
- 频率的由来:开发的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用
- 源码截图如下:
前边的和上边的一样,剩下的只有这一个不一样
3.1,具体代码如下:


3.2,频率限制的频率如下:
- DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定义的方法来实现,当我们请求进来时,走到我们频率组件的时候,DRF内部会有一个字典记录访问者的ip,以这个访问者的ip作为key,value为一个列表,存放每次访问的时间,(IP1:[第三次访问的时间, 第二次访问的时间, 第一次访问的时间])把每次访问的最新时间放入列表的最前端,记录这样一个数据结构,我们就可以通过限制时间和次数去限流
- 判断访问者的IP是否在这个请求的IP字典中
- 保证这个列表里都是最近10秒内访问的时间
- 判断当前请求时间和和列表里最早的请求时间差
- 如果大于10秒,说明请求以及不是最近10秒的,需要删除掉
- 继续判断倒数第二个,直到差小于10秒
- 判断列表的长度(即访问次数)是否大于我们设置的5次,如果大于就限流,并把时间放入最前端.
4,DRF的生命周期