频率逻辑:

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的更多相关文章

  1. Restframework 权限permission 组件实例-2

    1.在视图类里添加权限组件 class BookView(APIView): authentication_classes = [UserAuth] permission_classes = [SVI ...

  2. Restframework 分页器 Pagnation 组件实例-5

    分页逻辑 from rest_framework.pagination import PageNumberPagination class BookView(APIView): # authentic ...

  3. Restframework 认证authentication 组件实例-1

    1. 创建用户表和 token表 class User(models.Model): user =models.CharField(max_length=) pwd =models.CharField ...

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

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

  5. Vue组件实例间的直接访问

    前面的话 有时候需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件. 在组件实例中,Vue提供了相应的属性,包括$parent.$children.$refs和$root,这些属性都挂载在 ...

  6. 在被vue组件引用的 js 文件里获取组件实例this

    思路: 通过调用函数 把 组件实例this  传递 到 被应用的 js文件里 实例: 文件结构 在SendThis.vue 文件中引用 了modalConfig.js import modalConf ...

  7. vue构造函数(根实例化时和组件实例对象选项)参数:选项详解

    实例选项(即传给构造函数的options):数据,DOM,生命周期钩子函数,资源,组合,其他 数据 data 属性能够响应数据变化,当这些数据改变时,视图会进行重渲染. 访问方式: 1.通过 vm.$ ...

  8. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

  9. yii CComponent组件 实例说明1

    yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...

随机推荐

  1. ubuntu 操作系统的目录结构

    Ubuntu 系统的目录众多,并且 Ubuntu 系统是不分 C 盘.D 盘等的,但是所有的目录都是在/目录下面的. 一./:根目录,是所有目录的绝对路径的起始点,Ubuntu 中的所有文件和目录都在 ...

  2. 【转】HttpHandler的认识与加深理解

    原文:http://www.cnblogs.com/whtydn/archive/2009/10/19/1585778.html HttpHandler是HTTP请求的处理中心,真正地对客户端请求的服 ...

  3. Pycharm及python安装详细教程

    首先我们来安装python 1.首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载. 2. ...

  4. Linux wget命令

    一.简介 wget是一个Linux系统中的下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS ...

  5. LINUX 笔记5

    配置环境变量:(只是在当前命令行窗口中有用) 单独查看PATH环境变量,可用: [root@localhost u-boot-sh4]#echo $PATH 添加PATH环境变量,可用: [root@ ...

  6. java Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong name: pm/main)

    javac main.java 编译后没有问题 java main 出现下面在问题: Exception in thread "main" java.lang.NoClassDef ...

  7. Windows10(uwp)开发中的侧滑

    还是在持续的开发一款Windows10的应用中,除了上篇博客讲讲我在Windows10(uwp)开发中遇到的一些坑,其实还有很多不完善的地方,比如(UIElement.Foreground).(Gra ...

  8. c++编程思想里面的错误(可能c++标准变了,所以以前的东西没有更新)

    第一卷  第五章 5.3友元 下面的代码是<c++编程思想>里面的代码, struct X; struct Y{ void f(X*); }; struct X{ private: int ...

  9. Unsorted, maximum ==> sorted

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  10. C++之new/delete/malloc/free详解

    主要内容: 1.  C语言中的函数malloc和free 2.  C++中的运算符new和delete 3.  new/delete与malloc/free之间的联系和区别 4.  C/C++程序的内 ...