美文网首页
DRF认证,权限,限流,流程

DRF认证,权限,限流,流程

作者: 2simple | 来源:发表于2019-05-07 20:34 被阅读0次

    drf十大组件

    认证   权限(授权)    用户访问次数/频率限制    版本   解析器(parser)  

    序列化    分页   路由系统    视图    渲染器


    drf认证流程:

    1.首先执行dispatch方法

    2.重新封装Request

    3.initial(request)方法里面有各种封装函数, 其中perform_authentication(request)是认证的函数, 返回一个request.user

    4.def _authenticate():循环所有的authentication对象,执行authenticate方法

    5.Authtication 自定义认证类

    6.def authenticate():

    自定义认证

    -报错

    -返回元组(request.user, request.auth)

    局部设置认证 全局设置认证

    drf权限流程:

    1.首先执行dispatch方法

    2.重新封装Request

    3.initial(request)方法里面有各种封装函数, 其中check_permissions(request)是权限的函数

    4. check_permissions中的has_permission()(要复写)就是权限函数(get_permissions循环所有权限类)

    5. Permisson自定义权限类

    has_permission自定义权限

    True, 有权限

    False, 无权限

    其中message属性为没有权限返回的字符串

    权限局部使用 全局设置权限

    drf限流(频率)流程:

    频率组件原理

    DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定义的方法来实现。

    当我们请求进来,走到我们频率组件的时候,DRF内部会有一个字典来记录访问者的IP,

    以这个访问者的IP为key,value为一个列表,存放访问者每次访问的时间,

    {  IP1: [第三次访问时间,第二次访问时间,第一次访问时间],}

    把每次访问最新时间放入列表的最前面,记录这样一个数据结构后,通过什么方式限流呢~~

    如果我们设置的是10秒内只能访问5次,

      -- 1,判断访问者的IP是否在这个请求IP的字典里

      -- 2,保证这个列表里都是最近10秒内的访问的时间

          判断当前请求时间和列表里最早的(也就是最后的一个的)请求时间的差

          如果差大于10秒,说明请求已经不是最近10秒内的,删除掉,

          继续判断倒数第二个,直到差值小于10秒

      -- 3,判断列表的长度(即访问次数),是否大于我们设置的5次,

          如果大于就限流,否则放行,并把时间放入列表的最前面。


    限流(频率)流程:

    1.首先执行dispatch方法

    2.重新封装Request

    3.initial(request)方法里面有各种封装函数, 其中check_throttles是关于限流的

    限流局部使用 限流全局使用

    版本:

    1.和认证的流程一样,进入initial(request)

    2.在认证,权限,节流前先执行了这两句函数,获取到version,scheme,并分别赋值给request对象的version, versioning_scheme属性

    3.进入determine_version()函数

    4.在这里获取到scheme就是api_settings.DEFAULT_VERSIONING_CLASS,系统默认版本控制类,那scheme.determine_version(request, *args,kwargs) 就是该类下的一个方法

    5.查看rest_framework库的一个自带类中的determine_version方法, 返回的是版本号。于是version, scheme分别是版本号和一个版本控制类,并分别赋值给request对象的version, versioning_scheme属性。


    DRF内置的解析器FormParser,JSONParser

    相关文章

      网友评论

          本文标题:DRF认证,权限,限流,流程

          本文链接:https://www.haomeiwen.com/subject/jbgyoqtx.html