首页
学习
活动
专区
圈层
工具
发布

Django Rest Framework 限流(下)

Django Rest Framework 限流(上)

  • 目录结构
  • 具体限制访问
  • 配置限流类
  • 视图

① 目录结构

向认证一样Django进阶篇 Rest framework (五),在 utils 包中定义限流组件。

② 具体限制访问

对于匿名用户和认证用户做不同的限制访问。

③ 配置限流类

可以在 settings.py 文件中全局配置,也可以在视图中重写,局部配置,但是访问频率,需要限流类的 scope 属性定义。

对于匿名用户,每分钟访问5次;认证用户,每分钟10次。

④ 视图

二、源码分析

Django Rest Framework 权限(下)一样进入,request 的请求流程,进入源码查看具体权限的操作。

① 进入 dispatch() 方法

② 进入 initial() 方法

③ 进入 check_throttles() 方法

④ 获取限流类

获取限流类之后并实例化成对象,使得可以调用具体的方法

同样的默认是通过全局配置

⑤ 原生的限流类

在 django rest framework 中也有相应的限流类,主要使用 SimpleRateThrottle,因为在 SimpleRateThrottle 中的一些方法已经是实现了需要的逻辑。可以看下

SimpleRateThrottle 具体做了什么?

三、总结

节流,同样可以通过全局配置和局部配置的方法,影响视图。

值得注意的是,有一个必须要重写的接口 get_cache_key()

  • 当匿名用户访问的时候,返回值是匿名用户的 IP;
  • 当为认证用户的时候,可以是用户的任何唯一标识,因为在 VISIT_RECORD 中的键是唯一的。

scope 定义了具体的一个限流类怎么节流,在 settings.py 文件和节流类中都需要定义。SimpleRateThrottle 中的 parse_rate() 方法对 scope 进行了解析。

  • “user”: "1/s",表示一秒访问一次
  • "user": "1/m",表示一分钟访问一次
  • "user": "1/h",表示一个小时访问一次
  • "user": "1/d",表示一天访问一次
下一篇
举报
领券