Restframework 频率throttle组件实例-3
频率逻辑:
from rest_framework.throttling import BaseThrottle
import time VISIT_RECORD={} class VisitThrottle(BaseThrottle): def __int__(self):
self.history =None def allow_request(self, request, view):
"""
限制IP每分钟访问不能超过3次
:param request:
:param view:
:return:
""" #确定访问IP
remote_addr =request.META.get("REMOTE_ADDR")
print(remote_addr) #获取当次访问时间
ctime =time.time() #if 第一次访问
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr]= [ctime,]
return True history =VISIT_RECORD.get(remote_addr)
self.history =history while history and ctime -history[-]> :
history.pop() if len(history)<:
history.insert(,ctime)
return True else:
return False def wait(self):
#当前访问时间
ctime =time.time() #访问时间历史记录self.history
return -(ctime- self.history[-])
应用频率逻辑
class BookView(APIView):
authentication_classes = [UserAuth]
permission_classes = [SVIPPermission]
throttle_classes = [VisitThrottle]
def get(self,request):
"""
查看所有书籍
:param request:
:return:
"""
book_list=Book.objects.all()
serializer= BookSerializer(book_list,many=True)
return Response(serializer.data) def post(self,request):
"""
添加一条书籍
:param request:
:return:
"""
serializer=BookSerializer(data=request.data,many=True)
if serializer.is_valid():
serializer.save()#create操作.
return Response(serializer.data)
else:
return Response(serializer.errors) class BookViewDetail(APIView):
def get(self,request,pk):
edit_book =Book.objects.get(pk=pk)
serializer =BookSerializer(edit_book,many=False)
return Response(serializer.data)
def put(self,request,pk):
edit_book=Book.objects.get(pk=pk)
serializer =BookSerializer(data=request.data,instance=edit_book)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
def delete(self,request,id):
edit_obj =Book.objects.get(pk=id).delete()
return Response("")
全局应用逻辑
REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES': (
'app01.utils.auth_class.UserAuth',
),
'DEFAULT_PERMISSION_CLASSES': (
'app01.utils.svippermission_class.SVIPPermission',
),
"DEFAULT_THROTTLE_CLASSES": (
"app01.utils.throttle_class.VisitThrottle",
),
}
频率设置的第二种方法:
视图逻辑
class VisitThrottle(SimpleRateThrottle):
scope="visit_rate" def get_cache_key(self,request, view): return self.get_ident(request)
全局配置
REST_FRAMEWORK={
"DEFAULT_THROTTLE_RATES": {
"visit_rate": "10/m",
},
Restframework 频率throttle组件实例-3的更多相关文章
- Restframework 权限permission 组件实例-2
1.在视图类里添加权限组件 class BookView(APIView): authentication_classes = [UserAuth] permission_classes = [SVI ...
- Restframework 分页器 Pagnation 组件实例-5
分页逻辑 from rest_framework.pagination import PageNumberPagination class BookView(APIView): # authentic ...
- Restframework 认证authentication 组件实例-1
1. 创建用户表和 token表 class User(models.Model): user =models.CharField(max_length=) pwd =models.CharField ...
- Django 之 restframework 频率组件的使用
Django 之 restframework 频率组件的使用以及源码分析 频率组件的使用 第一步,先写一个频率类,继承SimpleRateThrottle 一定要在这个类里面配置一个scop='字符串 ...
- Vue组件实例间的直接访问
前面的话 有时候需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件. 在组件实例中,Vue提供了相应的属性,包括$parent.$children.$refs和$root,这些属性都挂载在 ...
- 在被vue组件引用的 js 文件里获取组件实例this
思路: 通过调用函数 把 组件实例this 传递 到 被应用的 js文件里 实例: 文件结构 在SendThis.vue 文件中引用 了modalConfig.js import modalConf ...
- vue构造函数(根实例化时和组件实例对象选项)参数:选项详解
实例选项(即传给构造函数的options):数据,DOM,生命周期钩子函数,资源,组合,其他 数据 data 属性能够响应数据变化,当这些数据改变时,视图会进行重渲染. 访问方式: 1.通过 vm.$ ...
- BootStrap fileinput.js文件上传组件实例代码
1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...
- yii CComponent组件 实例说明1
yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...
随机推荐
- 4-js 函数
总是有些奇奇怪怪的问题: <div> <p class="productStatus"> <span>成交量 <em>${goods ...
- css水波动画效果
代码来源:http://www.jq22.com/code1526 HTML: <div class="waves"></div> css: html, b ...
- Judy Array API介绍
本文介绍https://code.google.com/p/judyarray/这个JudyArray实现的API. judy_open:新建一个JudyArray,并返回指向这个JudyArray的 ...
- Bad Hair Day
/* Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-c ...
- 怎样完整地离线更新并升级基于 Debian 的操作系统
不久之前我已经向你展示了如何在任意离线的 Ubuntu 和 Arch Linux 操作系统上安装软件. 今天,我们将会看看如何完整地离线更新并升级基于 Debian 的操作系统. 和之前所述方法的不同 ...
- ORACLE 实用案列
ORACLE实用函数之一 ratio_to_report的简单使用 Oracle 输出树形结构 ORACLE 查看分区表分区大小 oracle 用一个表的一个字段更新另一个表的一个字段 oracle ...
- java如何实现以数据流的形式下载压缩包到本地?
先不多说,直接贴代码吧,在服务器的E盘下放一个E:/manual.rar的压缩包 package com.cellstrain.icell.controller; import org.springf ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- hdu-1181(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1181 思路:bfs,就是每次找到匹配麻烦一点,注意如果结尾和开头相同,就不算. #include< ...
- flask_模板
由于python中生成html比较繁琐,所以flask自动为你配置好jinjia2模板.下面我们开始学习模板应用吧~ 1.编写microblog模块 注:(1)这里为了渲染模板,我们从Flask导入了 ...