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. js 碰撞+拖拽

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

  2. (转)解决windows live writer的段首缩进问题

    原文地址:http://blog.csdn.net/xiao_wanpeng/article/details/6381799 Windows live writer 默认是没有段首缩进的,并且不能修改 ...

  3. 单选框 改成 复选框 的css样式

    fillEditorFakeTable.less /* add for the global title checkbox fake */ .fake-checkbox { display: inli ...

  4. Elasticsearch 之聚合分析入门

    本文主要介绍 Elasticsearch 的聚合功能,介绍什么是 Bucket 和 Metric 聚合,以及如何实现嵌套的聚合. 首先来看下聚合(Aggregation): 什么是 Aggregati ...

  5. F版本SpringCloud 2—什么是SpringCloud?SpringCloud版本选择

    引言:搭建微服务架构就像是买电脑,使用SpringCloud就是在买品牌机. 前言 昂,美好的天气里,不想直接说技术,给小伙伴萌看看傍晚的天空吧. -- 能找到天上的北极星吗? 上一篇文章中,通过一个 ...

  6. 简单BBS项目开始(二)

    登陆和生成图片验证码 1.生成图片 pillow 1.生成图片的模块pillow,在python中安装pillow,在Django中使用时用PIL2. 在页面上<img id="val ...

  7. Spring Cloud 系列之 Alibaba Sentinel 服务哨兵

    前文中我们提到 Netflix 中多项开源产品已进入维护阶段,不再开发新的版本,就目前来看是没有什么问题的.但是从长远角度出发,我们还是需要考虑是否有可替代产品使用.比如本文中要介绍的 Alibaba ...

  8. 从SqlSessionFactoryBean的引用浅谈spring两种bean模式

    mybatis是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory可以通过SqlSessionFactoryBuilder获得实例.使用mybatis-sp ...

  9. UVA - 548 根据中序遍历和后序遍历建二叉树(关于三种遍历二叉树)

    题意: 同时给两个序列,分别是二叉树的中序遍历和后序遍历,求出根节点到叶子结点路径上的权值最小和 的那个 叶子节点的值,若有多个最小权值,则输出最小叶子结点的和. 想法: 一开始想着建树,但是没有这样 ...

  10. iOS OCR

    身份证识别,又称 OCR 技术.OCR 技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算 ...