一、频率组件的使用

  频率组件的存在对我们这web开发有着很大的影像,它的作用就是限制用户在一段时间内访问的次数。

  下面让我们介绍一下频率组件怎样使用

  1.首先需要导入

from rest_framework.throttling import SimpleRateThrottle

  2.编写我们的频率类

 

class MyThrottle(SimpleRateThrottle):
scope = "visit_rate" # 这个值决定了在配置时使用那个变量描述限制的频率 def get_cache_key(self, request, view): # 这个方法也是必须要有
return self.get_ident(request)

  3.最后还需要再setting中配置一下

REST_FRAMEWORK = {
# 'DEFAULT_THROTTLE_CLASSES': (
# 'app01.utils.throttle_class.MyThrottle',
# ),
'DEFAULT_THROTTLE_CLASSES': (
'app01.app_thorttle.MyThrottle',
),
"DEFAULT_THROTTLE_RATES": {
"visit_rate": "5/m", # 这个参数就是频率类中定义的那个参数scope, 其中第一个数字5表示5次,后面的m表示一分钟,还有s,一秒, h, 一小时, d, 一天
}
} duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}

二、作用局部的频率类

  

三、如何自己实现频率组件

  1.编写频率类

import time
from rest_framework.throttling import BaseThrottle class MyThrottle(BaseThrottle):
visited_record = {} def __init__(self):
self.history = None def allow_request(self, request, my_cbv): # 这个my_cbv是源码中传的我们的视图类,这里我们也要传进去
# print(self.get_ident(request)) # 可以获取本次请求的ip
ip = request.META.get("REMOTE_ADDR")
if ip not in self.visited_record:
self.visited_record[ip] = [] current_time = time.time()
history = self.visited_record[ip]
self.history = history
print(history) while history and current_time - history[-1] > 60: # 把大于60秒的时间都删掉
history.pop() if len(history) > 2: # 第三次访问,列表中只有2个值,也满足条件
return False
history.insert(0, current_time)
return True def wait(self):
"""
用于返回还剩多少时间访问; 本次访问时间:9:50:55
[09:50:30, 09:50:20, 09:50:10] 剩余 60 - (9:50:55 - 09:50:10)秒才能访问
:return:
"""
c_time = time.time()
return 60 - (c_time - self.history[-1])

  2.在视图类中加入

throttle_classes = [MyThrottle]

  效果如图:

  

RestFramework之频率组件的更多相关文章

  1. REST-framework之频率组件

    REST-framework之频率控制 一 频率简介 为了控制用户对某个url请求的频率,比如,一分钟以内,只能访问三次 二 自定义频率类,自定义频率规则 自定义的逻辑 ""&qu ...

  2. Rest_Framework之频率组件部分

    一.RestFramework之频率组件源码部分 频率组件的源码部分和权限组件流程一模一样的,这里就不多说了,直接上源码的主要逻辑部分: def check_throttles(self, reque ...

  3. rest-framework框架——认证、权限、频率组件

    一.rest-framework登录验证 1.models.py添加User和Token模型 class User(models.Model): name = models.CharField(max ...

  4. Django 之 restframework 频率组件的使用

    Django 之 restframework 频率组件的使用以及源码分析 频率组件的使用 第一步,先写一个频率类,继承SimpleRateThrottle 一定要在这个类里面配置一个scop='字符串 ...

  5. rest-framework频率组件

    throttle(访问频率)组件 1.局部视图throttle from rest_framework.throttling import BaseThrottle VISIT_RECORD={} c ...

  6. rest-framework频率组件、url注册器、响应器、分页器

    频率组件 import time from rest_framework.throttling import BaseThrottle,SimpleRateThrottle IP_DICT = {} ...

  7. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

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

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

  9. python全栈开发day101-认证组件、权限组件、频率组件

    1.Mixins类分析 这两个函数都在GenericAPIView下,这就是为什么必须搭配继承GenericAPIView的原因. 这两个主要是get_object()较为复杂. 2.认证组件源码分析 ...

随机推荐

  1. redis八大应用场景

    1.缓存 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力.Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓 ...

  2. Form表单的传递与接收

    目录 表单的构建 后端接收 创建model 用Model接收表单的后端 表单的构建 我才知道这个东西,在开发中经常遇到表单的情况.一下子提交一串内容.表单元素 form,里面的内容必须有name字段. ...

  3. js 延迟函数

    1.对于 setTimeout函数 普通函数: 100ms后执行时,this指向window对象. function foo(){ setTimeout(function(){ console.log ...

  4. node.js http-server 搭建本地服务器

    使用vue-cli创建的项目,能够实现浏览器中自动刷新,实时查看项目效果,其中的原理在于,webpack在本地启动了一个本地服务器,将本机当作一台服务器: 打包后的文件是一个html静态页面,在本地文 ...

  5. Nginx之开启压缩

    参考:https://blog.csdn.net/php12345679/article/details/80843939 https://blog.csdn.net/pf1234321/articl ...

  6. caffe windows10 vs2015 cuda8.0 ->vs2013

    http://blog.csdn.net/xjz18298268521/article/details/52190184 http://www.cnblogs.com/xuanyuyt/p/57269 ...

  7. windows下大数据开发环境搭建(4)——Spark环境搭建

    一.所需环境 · Java 8 · Python 2.6+ · Scala · Hadoop 2.7+ 二.Spark下载与解压 http://spark.apache.org/downloads.h ...

  8. C++_没有STL不能解决的问题之——<algorithm>

    这个坑好大,慢慢写 一.非修改式序列操作 1.find() 在区间中查找出某元素第一次出现的位置(注意!!是返回地址值) int main(){ ]={,,,,,}; int *b; b=find(a ...

  9. 【面试题】如何删除 ArrayList 中奇数位置的元素?

    如何删除 ArrayList 中奇数位置的元素? 面试题携程 import java.util.ArrayList; import java.util.Iterator; import java.ut ...

  10. D1. Docker: win7 环境下安装 Docker

    [下载与安装] win7.win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-too ...