DRF限制访问频次
官方文档:https://www.django-rest-framework.org/api-guide/throttling/
1、什么场景下需要限制访问频次呢?
1)防爬虫:爬虫可能会在短时间内大量的访问服务接口,增加服务器压力
2)对于需要限制访问频次的接口
2、DRF如何限速:
通过 rest_framework下面的throttling 模块实现
throttling模块主要提供了三种限速方式:

1)AnonRateThrottle
针对未登录用户的限速,通过IP地址区分用户
2)UserRateThrottle:
针对已登录用户,通过user id来区分用户
3)ScopedRateThrottle:
限制用于对于每个视图的访问频次,通过ip地址或者useid来区分
使用方法:
1)在配置文件中配置需要使用什么类型的限速,以及限制的访问频次
访问频次单位有:second,minute,hour和day

2)在对应的视图函数中使用
throttle_classes = (AnonRateThrottle,)
from rest_framework.throttling import AnonRateThrottle
class GoodListView(APIView):
throttle_classes = (AnonRateThrottle,)
@cache_response(cache_errors=False)
def get(self, request, format=None):
print(request.query_params)
goods = Goods.objects.all()[:10]
goods_serializer = GoodListSerializer1(goods, many=True)
return Response(goods_serializer.data)
3)使用装饰器
@throttle_class([AnonRateThrottle,])
from rest_framework.decorators import throttle_classes @throttle_classes([AnonRateThrottle,])
class GoodListView(APIView):
# throttle_classes = (AnonRateThrottle,)
@cache_response(cache_errors=False)
def get(self, request, format=None):
print(request.query_params)
goods = Goods.objects.all()[:10]
goods_serializer = GoodListSerializer1(goods, many=True)
return Response(goods_serializer.data)
4)对于ScopedRateThrottle,可用于限制访问指定的API,仅当访问的视同中包含 throttle_scope属性时,才会应用此限制
class ContactListView(APIView):
throttle_scope = 'contacts'
pass class ContactDetailView(APIView):
throttle_scope = 'contacts'
pass class UploadView(APIView):
throttle_scope = 'uploads'
pass
然后在settings中配置如下:
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'contacts': '1000/day',
'uploads': '20/day'
}
}
在上面的视图中,ContactListView和ContactDetailView两个视图中,throttle_scope都是contacts,settings中,设置的contacts频率限制为1000次每天,所以ContactListView和ContactDetailView两个视图函数加起来一天的访问次数不能超过1000次
UploadView的访问次数,不能超过20次每天
DRF限制访问频次的更多相关文章
- 分析apache日志,统计ip访问频次命令
统计访问频次最高的10个ip: cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq -c|sort -nr|head -10 统计恶意i ...
- API接口访问频次限制 / 网站恶意爬虫限制 / 网站恶意访问限制 方案
API接口访问频次限制 / 网站恶意爬虫限制 / 网站恶意访问限制 方案 采用多级拦截,后置拦截的方式体系化解决 1 分层拦截 1.1 第一层 商业web应用防火墙(WAF) 直接用商业服务 传统的F ...
- DRF之访问权限控制和访问频率控制(节流)
权限控制 前言 用户验证用户权限,根据不同访问权限控制对不同内容的访问. 建议了解视图.token验证的内容. 使用流程 自定义访问权限类,继承BasePermission,重写has_permiss ...
- vue.js+DRF跨域访问图片
一.背景 在前后端分离过程时,后端服务器只开放本地接口,而前端则开放IP接口,在DRF响应请求时,会把域名(locahost+port)响应给前端服务器,前端服务器把再把数据响应给浏览器,浏览器在解析 ...
- 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...
- drf 认证、权限、限流、过滤、排序、分页器
认证Authentication 准备工作:(需要结合权限用) 1. 需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py creates ...
- DRF之权限认证,过滤分页,异常处理
1. 认证Authentication 在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_f ...
- day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档
目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...
- Web开发基本准则-55实录-Web访问安全
Web开发工程师请阅读下面的前端开发准则,这是第一部分,强调了过去几年里我们注意到的Web工程师务须处理的Web访问安全基础点.尤其是一些从传统软件开发转入互联网开发的工程师,请仔细阅读,不要因为忽视 ...
随机推荐
- C#冒泡排序算法(简单好理解)
我对冒泡排序算法的理解: 把最大的往后,从最后一个与前一个对比,然后互换位置,直到全部换好. 目标:从小到大排序 源代码如下: namespace net冒泡排序{ class Program { s ...
- 模式识别笔记4-集成学习之AdaBoost
目前集成学习(Ensemble Learning) 分为两类: 个体学习器间存在强依赖关系.必须串行化生成的序列化方法:Boosting 个体学习器间不存在强依赖关系,可同时生成的并行化方法:Bagg ...
- SpringBoot之GZip压缩,HTTP/2,文件上传,缓存配置
1 设置应用端口以及context # HTTP Server port server.port=8080 # Make the application accessible on the given ...
- Prometheus安装和配置node_exporter监控主机
Node_exporter是可以在* Nix和Linux系统上运行的计算机度量标准的导出器. Node_exporter 主要用于暴露 metrics 给 Prometheus,其中 metrics ...
- 微信公众号开发C#系列-6、消息管理-普通消息接受处理
1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...
- 【设计模式+原型理解】第三章:javascript五种继承父类方式
[前言] 我们都知道,面向对象(类)的三大特征:封装.继承.多态 继承:子类继承父类的私有属性和公有方法 封装:把相同的代码写在一个函数中 多态: ->重载:JS严格意义上是没有重载,但可以通过 ...
- MVC 中 Razor引擎学习:RenderBody,RenderPage和RenderSection
RenderBody 在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到 标签里有这样一条语句: @Rend ...
- Spring Aop底层原理详解
Spring Aop底层原理详解(来源于csdn:https://blog.csdn.net/baomw)
- Python二级-----------程序冲刺1
1. 仅使用 Python 基本语法,即不使用任何模块,编写 Python 程序计算下列数学表达式的结果并输出,小数点后保留3位. ...
- 【代码笔记】Web-CSS-CSS Align
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...