DRF的认证,频率,权限

1,DRF的认证

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

1.2, DRF的相关代码:

model表的创建
view视图函数
认证类
视图的测试

2,DRF权限

  • 和django的全下类似,restframeworke也是给某一些用户添加角色,通过给不同的角色分配不同的权限,
  • 源码分析如下:

说明:因为python代码是一行一行执行的,所以先是认证,然后是权限,在是频率,按这个顺序执行代码.

权限代码如下:

权限类
权限的视图view
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的生命周期

猜你喜欢

转载自www.cnblogs.com/ljc-0923/p/10265346.html