前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django Rest Framework 限流(下)

Django Rest Framework 限流(下)

作者头像
小团子
发布2019-07-18 11:34:47
8000
发布2019-07-18 11:34:47
举报
文章被收录于专栏:数据云团

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",表示一天访问一次
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档