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 ...
随机推荐
- HTML实例
HTML内容繁多,不易记忆,故将此网址 作为查阅复习的工具http://www.w3school.com.cn/example/html_examples.asp
- win 下 apache 实现负载均衡
1.打开apache的配置文件httpd.conf,打开如下项 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_mo ...
- uploadify 文件上传报http 302错误
uploadify文件上传会报http 302错误,在配置文件中将处理上传的通用类取消验证, 假设上传的通用处理类是fileUpload.ashx,则在配置文件同添加下面过滤配置能解决问题. < ...
- python不用声明数据类型
不用声明变量一样,Python不用去声明函数的返回类型,是由于其“若类型”的语言特性决定的. 在其他语言中,例如C/C++语言中在存储一个数据之前,都需要在内存中给这个数据开辟一个固定的内存空间,并给 ...
- [Groovy] List和Map用法搜集
http://chenfeng0104.iteye.com/blog/609075 http://www.cnblogs.com/muzi1994/p/5169928.html https://zhi ...
- Ehcache配置参数简介
< defaultCache maxElementsInMemory = "10000" maxElementsOnDisk = " ...
- try-catch+thows异常范围说明
方式一: CatalogPO deleteTarget = null; /** 查询是否存在 **/ deleteTarget = catalogMapper.findByCatalogId(cata ...
- gj8 元类编程
8.1 property动态属性 from datetime import date, datetime class User: def __init__(self, name, birthday): ...
- PHP中的mb_convert_encoding与iconv函数介绍
php传输乱码 mb_convert_encoding这个函数是用来转换编码的.原来一直对程序编码这一概念不理解,不过现在好像有点开窍了. 不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比 ...
- 事务不起作用 Closing non transactional SqlSession
In proxy mode (which is the default), only external method calls coming in through the proxy are int ...