rest_framework之频率详解 03
访问频率(节流)
1.某个用户一分钟之内访问的次数不能超过3次,超过3次则不能访问了,需要等待,过段时间才能再访问。
2.自定义访问频率。两个方法都必须写上。
登入页面的视图加上访问频率
3.返回值False,则不能访问
4.返回值True,则能访问
上面的节流太简单粗暴了,接下来加上一些判断。先获取用户IP
节流源码
1.
2.remote_addr = request.META.get('REMOTE_ADDR') 获取IP地址
3.获取IP地址
4.print(remote_addr) 打印用户的ID
5.保存用户的所有记录,先定义一个全局的变量。(可以放数据库、缓存)
6.为了逻辑更清晰,我们让时间近的,放到列表的最前面(就是列表的左端)。
只要访问时间超过一分钟,我们就删掉他。
如果一分钟内已经访问三次了,第四次访问时就会被拒绝。
等到最早的一个访问时间超过一分钟被删掉,就可以继续访问了。
用while循环,可以把所有过期的时间都删掉。
被拒绝
7.wait方法:提示需要等待多少秒才能访问。
运行结果
8.等待时间不能写死,应该的动态的。
运行结果:
节流源码流程
1.
2.
3.
4.
5.全局配置文件
6.局部配置
7.check_throttles 方法执行每一个节流的 allow_request方法。
8.allow_request 如果返回的False,则抛出异常。
9.超出访问次数,抛出异常。
10.wait 把提示时间拿到,还剩多少秒。
全局配置
把访问频率的类放到app01.utils.throttle.py文件里
全局配置settings.py里面
内置控制频率类 from rest_framework.throttling import BaseThrottle
1.源码:
2.继承内置控制频率类。
3. class SimpleRateThrottle(BaseThrottle):
4.
SimpleRateThrottle:源码流程
1.请求一进来先执行构造方法。__init__()
2.get_rate() 取scope的值。
3.THROTTLE_RATES 去全局配置文件取值
4.配置全局文件settings.py.
接下来我们定义一个30秒访问10次的频率。
setting.py文件写一条配置。内部有自动实现30秒10次!!!
如果是我们自己写的,就必须改源码。内置的只要传参即可。
5.设置为每分钟3次
6.rate = 3/m 获取到值
7.进行分割rate,分别那种次数、时间
8.
9.自己写get_cache_key方法
10.继续源码
11.缓存
12.符合条件,访问成功,返回True
13.访问次数太多,返回False ,不能访问。
14.提示时间也给我们写好了,不用自己写。
15.所以4行代码就搞定啦,再加上配置。
运行结果:
正常访问
请求超过3次就抛异常。
问题:能不能让当前登入用户也做这样的操作?
1.对登入用户的控制访问频率。
2.setting.py 已登入的用户10/m
views.py
登入api 局部设置(单独设置) 匿名访问频率 3/m. 其他api都默认用全局的。
运行结果:OrderView订单api 、UserInfoView用户信息api 都是默认用全局已登入访问频率的配置。匿名用户3/m,超过3次就不能再访问啦。
http://127.0.0.1:8011/app01/v1/auth/
三次访问以后
已登陆用户访问的就不写了,自己悟,很简单。
rest_framework之频率详解 03的更多相关文章
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- rest_framework之序列化详解 06
拿到所有的角色数据 1.urls.py 2.models.py 假设只有3个角色 3.views.py from api import models import json json只能序列化pyt ...
- rest_framework之版本详解 04
访问不同版本,给不同内容. rest规范:版本要么放url上:要么放请求头里. 1.原来的url的版本都写死了.只能写v1 from django.conf.urls import url from ...
- rest_framework之规范详解 00
接口开发 方式1:缺点:如果有10张表,则需要40个url. urls.py views.py 缺点:如果有10张表,则需要40个url. 接下来就出现了resrful 规范,比较简洁 方式2: ...
- 21个项目玩转深度学习:基于TensorFlow的实践详解03—打造自己的图像识别模型
书籍源码:https://github.com/hzy46/Deep-Learning-21-Examples CNN的发展已经很多了,ImageNet引发的一系列方法,LeNet,GoogLeNet ...
- 小甲鱼PE详解之IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用(PE详解03)
咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用! (视频教程:http://fishc.com/a/shipin/jiemixilie/) 接着我们来谈谈 IM ...
- IO模型(epoll)--详解-03
写在前面 epoll是开发linux高性能服务器的必备技术至,epoll本质,是服务端程序员的必须掌握的知识. 七.epoll的原理和流程 本节会以示例和图表来讲解epoll的原理和流程. 创建epo ...
- RFC2544学习频率“Learning Frequency”详解—信而泰网络测试仪实操
在RFC2544中, 会有一个Learning Frequency的字段让我们选择, 其值有4个, 分别是learn once, learn Every Trial, Learn Every Fram ...
- 【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)
转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取 (Matlab 程序详解) ...
随机推荐
- UML基本表示法
1 物件 结构化物件 类 接口 协作 用例 组件 节点 行为物件 交互 状态机器 组物件 包 注解物件 注释 2 关系 依赖关系 协作 泛化 实现 3 UML图 结构化物件 类注释 对象表示法 接口表 ...
- 用python批量执行VBA代码
先说下背景环境 1. 公司需要问卷调查,有两份问卷, 1)是spss问卷,2)是excel问卷.spss问卷数据不全,但有各种标签, excel呢, 生成的数据直接把选项变成了值 2. 现在需要把ex ...
- 【转】MFC 数据绑定 DoDataExchange( )
void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...
- ffplay的音视频同步分析
以前工作中参与了一些音视频程序的开发,不过使用的都是芯片公司的SDK,没有研究到更深入一层,比如说音视频同步是怎么回事.只好自己抽点时间出来分析开源代码了,做音视频编解码的人都知道ffmpeg,他在各 ...
- mac下普通用户无法创建crontab的问题解决
想在mac下弄一个crontab定时任务,以为会像linux上那样顺利那,结果碰壁了,报错信息例如以下: ➜ autoshell crontab -ecrontab: no crontab for ...
- java基础——Collections.sort的两种用法
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static <T extends Comparable<? ...
- 【Graphlab】
https://dato.com/ graphlab
- 解决导入protobuf源代码Unity报错的问题
将源代码导入Assets目录后, unity引擎会出现以下报错: 解决办法: 在 unity项目Assets目录中创建smcs.rsp文件,内容为-unsafe,其作用为可编译不安全代码. 然 ...
- POSIX是什么?
1.什么是POSIX? POSIX是可移植操作系统接口(Portable Operating System Interface for UNIX)的缩写,是IEEE为了在各种UNIX操作系统上运行软件 ...
- SVN目录权限设置
---恢复内容开始--- 如图,这里我建的项目库为myRepositories,其下边又有许多文件,现在要分别对每个文件进行svn权限配置. 配置 进入上面生成的文件夹conf下,进行配置.有以下几个 ...