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