DRF的频率

频率限制是做什么的

开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用。

频率组件原理

DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定义的方法来实现。
当我们请求进来,走到我们频率组件的时候,DRF内部会有一个字典来记录访问者的IP,
以这个访问者的IP为key,value为一个列表,存放访问者每次访问的时间,


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

把每次访问最新时间放入列表的最前面,记录成这样的一个数据结构

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

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

  -- 2,保证这个列表里都是最近10秒内的访问的时间
      判断当前请求时间和列表里最早的(也就是最后的)请求时间的差值
      如果差大于10秒,说明请求以及不是最近10秒内的,删除(最早的)最后一个时间,
      继续判断倒数第二个,直到差值小于10秒

  -- 3,判断列表的长度(即访问次数),是否大于我们设置的5次,
      如果大于就限流,否则放行,并把时间放入列表的最前面。

频率组件源码

频率组件提供的几大类:

DRF频率、分页、解析器、渲染器

我们以继承下面这个类为例:

 DRF频率、分页、解析器、渲染器

from django.conf.urls import url, include
from django.contrib import admin


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^book/', include("SerDemo.urls")),
    url(r'^api/user/', include("AuthDemo.urls")),
    url(r'^api/throttle/', include("Throttle.urls")),
    url(r'^api/pagination/', include("Pagenation.urls")),
    url(r'^api/(?P<version>[v1|v2]+)/', include("VersionDemo.urls")),
]
DRFDemo/DRFDemo/urls.py

相关文章: