django-rest-framework限流

在项目根目录下新建utils的文件

  • 新建throttling.py
from django_redis import get_redis_connection
from rest_framework.throttling import BaseThrottle
from django.conf import settings
import time class MyThrottle(BaseThrottle): def __init__(self):
# 定义实例化属性
self.remote_addr = None
self.throttle_times = settings.DEFAULT_THROTTLE_TIMES
self.throttle_seconds = settings.DEFAULT_THROTTLE_SECONDS def allow_request(self, request, view):
'''定义限流的处理逻辑'''
# 获取用户的id
# remote_addr = request.META.get('REMOTE_ADDR')
remote_addr = self.get_ident(request)
coon = get_redis_connection('default')
self.remote_addr = remote_addr
# 获取当前时间
current_time = int(time.time())
# 从左侧插入redis列表
coon.lpush(remote_addr, current_time)
# 保存最新5条信息
coon.ltrim(remote_addr, 0, self.throttle_times - 1)
# 获取总的5条记录
times_byte_list = coon.lrange(remote_addr, 0, self.throttle_times - 1)
# 将其中的byte转换成int
times_list = [int(_) for _ in times_byte_list]
# 判断是否符合条件
if coon.llen(remote_addr) < self.throttle_times:
return True
return times_list[0] - times_list[-1] > self.throttle_seconds def wait(self):
'''返回等待时长'''
coon = get_redis_connection('default')
first_time = coon.lindex(self.remote_addr, self.throttle_times - 1)
current_time = int(time.time())
return self.throttle_seconds - (current_time - int(first_time))
  • 自定义的截流类必须继承BaseThrottle, 且实现allow_request的成员方法
  • 返回为False表示不通过验证
  • wait方法返回一个int值,这个值会被返回到错误的信息中
  • 使用redis来操作访问记录
    • 采用列表的方式来存储
    • 采用用户的id地址来做键名
    • 定义配置来限制次数和时间段
    • 次数会被作为redis列表储存的长度

django-rest-framework限流的更多相关文章

  1. Django Rest framework序列化流程

    目录 一 什么是序列化 二 Django REST framework配置流程之Serializer 三 Django REST framework配置流程之ModelSerializer 一 什么是 ...

  2. Django Rest framework的限流实现流程

    目录 一 什么是throttle 二 Django REST framework是如何实现throttle的 三 Django REST framework中throttle源码流程 一 什么是thr ...

  3. rest framework之限流组件

    一.自定义限流 限流组件又叫做频率组件,用于控制客户端可以对API进行的请求频率,比如说1分钟访问3次,如果在1分钟内超过3次就对客户端进行限制. 1.自定义限流 假设现在对一个API访问,在30s内 ...

  4. django rest framework 项目创建

    Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Rest Framework Django REST Framework可以在Django的基 ...

  5. 前后端分离djangorestframework——限流频率组件

    频率限制 什么是频率限制 目前我们开发的都是API接口,且是开房的API接口.传给前端来处理的,也就是说,只要有人拿到这个接口,任何人都可以通过这个API接口获取数据,那么像网络爬虫的,请求速度又快, ...

  6. Django Rest Framework(2)

    目录 一.认证 二.权限 三.限制访问频率 四.总结 一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest ...

  7. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  8. Django Rest framework 之 节流

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  9. Django Rest framework 之 认证

    django rest framework 官网 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest fra ...

  10. drf 认证、权限、限流、过滤、排序、分页器

    认证Authentication 准备工作:(需要结合权限用) 1. 需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py creates ...

随机推荐

  1. Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库

    Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...

  2. js 渐变运动框架

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. .NET 5 Preview 1中的ASP.NET Core更新 (2020年3月16日)

    .NET 5 Preview1现在可用,可以进行评估了! .NET 5将是当前版本. 开始 要在.NET 5.0中开始使用 ASP.NET Core,请安装.NET 5.0 SDK. 如果您使用的是W ...

  4. vscode style内置auto会导致eslint格式化 对不齐报错

    "files.associations": { "*.vue": "vue", // "*.js": "jav ...

  5. Requests发送带cookies请求

    一.缘 起 最近学习[悠悠课堂]的接口自动化教程,文中提到Requests发送带cookies请求的方法,笔者随之也将其用于手头实际项目中,大致如下 二.背 景 实际需求是监控平台侧下发消息有无异常, ...

  6. Natas19 Writeup(Session登录,常见编码,暴力破解)

    Natas19: 提示,与上一题源码类似,只是PHPSESSID不连续.随便输入username和password,抓包观察PHPSESSID,发现是输入的信息,按照id-username的格式,由a ...

  7. Spring框架——IOC 自动装载

    IOC自动装载有两种形式 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  8. iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等

    保证能判断,呕心沥血,不行切JIJI 方法一 Objective-C // iPhoneX.iPhoneXR.iPhoneXs.iPhoneXs Max等 // 判断刘海屏,返回YES表示是刘海屏 - ...

  9. 《面试经典系列》- MySQL数据库存储引擎

    一.MySQL有多少种存储引擎? 在MySQL5之后,支持的存储引擎有十多个,但是我们常用的就那么几种,而且,默认支持的也是 InnoDB. 通过命令:show engines \g,我们可以查看到当 ...

  10. 实例演示:如何简化生产中的Pod安全策略?

    Pod安全策略对于强化K8S集群安全至关重要.本文将延续之前的文章继续深入介绍Pod安全策略. 首先,简单介绍了如何将Pod与Pod安全策略相关联,并使用RBAC来展示具体步骤.然后介绍如何在Ranc ...