一、频率组件的使用

  频率组件的存在对我们这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. while死循环

    while死循环放入主线程要注意,如果处理不当可能引起界面假死,如果界面假死,可以放入子线程中(如果每个循环处理时间现对于CPU很短,则建议在本次循环结束的尾部加入Sleep以释放对CPU的占用) C ...

  2. dockerfile里面的内容编写顺序,必须严格按照顺序编写,否则编译不成

    完整文档请参照https://www.cnblogs.com/effortsing/p/10480972.html 这里只介绍dockerfile里面的步骤顺序 cat>/home/jenkin ...

  3. Meta标签中的http-equiv属性

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...

  4. 内层元素设置position:relative后父元素overflow:hidden overflow:scroll失效 解决方法

    内层元素设置position:relative后父元素overflow:hidden overflow:scroll 都失效 解决方法:在position:relative的外层父容器加positio ...

  5. axios发post请求,后端接收不到参数的问题

    axios会帮我们自动转换请求数据和响应数据 以及 自动转换JSON数据,我们的请求头转换成 Content-Type变成了application/json;charset=utf-8,然后因为我们的 ...

  6. adb(Andorid Debug Bridge)安装和使用

    以下是adb工具包最新2017Google官方版下载地址: ADB和Fastboot for Windows https://dl.google.com/android/repository/plat ...

  7. NGUI无法显示

    早上起来发现 ,NGUI无法显示,后来发现是场景Camera的 depth =0 : 要设置depth=-1. 原来相机之间也有渲染层级

  8. HTTP_HOST , SERVER_NAME 区别

    当端口是80的时候,他们的内容是一样的. 但是当端口不是80的时候,就不一样了. # HTTP_HOST = SERVER_NAME:SERVER_PORT /** * 获取当前的host */ pu ...

  9. [转帖]再谈IO的异步,同步,阻塞和非阻塞

    再谈IO的异步,同步,阻塞和非阻塞 https://yq.aliyun.com/articles/53674?spm=a2c4e.11155435.0.0.48bfe8efHUE8wg   krypt ...

  10. 基于DNN的推荐算法总结

    1.早期的算法 深度学习在CTR预估应用的常见算法有Wide&Deep,DeepFM等. 这些方法一般的思路是:通过Embedding层,将高维离散特征转换为固定长度的连续特征,然后通过多个全 ...