zoukankan      html  css  js  c++  java
  • 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的生命周期

  • 相关阅读:
    备胎的养成记KeepAlived实现热备负载
    入坑系列之HAProxy负载均衡
    将Error异常日志从普通日志中剥离
    一步一步在Windows中使用MyCat负载均衡 下篇
    年终的第一篇总结 结束南漂 写在2017
    Android实现TCP断点上传,后台C#服务实现接收
    为什么我会反对大家写工作日报
    ANSI C、ISO C、Standard C联系与区别
    c、c++ char*和wchar*互相转换
    宽字符与Unicode (c语言 汉语字符串长度)
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/10265346.html
Copyright © 2011-2022 走看看