drf频率组件

  1. 什么是频率
  2. 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次

自定义频率规则

  1. 1.取出访问者ip
  2. 2.判断当前ip在不在访问字典中:
  3. 不在,则添加进去,返回True;
  4. 3.循环判断当前ip的列表,有值,并且当前时间减去列表的最后一个事件大于60s,(判断最早登陆的是不是超过60s)把这种数据pop掉,这样列表中只有60s以内的访问时间
  5. 4.判断,当前列表小于3,说明一分钟以内访问不足三次,把当前时间插入到列表的第一个位置(最早时间是否超过60s),返回True,顺利通过
  6. 5.当大于等于3,说明一分钟访问超过三次,返回False验证失败

Http request请求 META(获得用户IP)

  1. 7.HttpRequest.META
  2. 一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:
  3. 取值:
  4. CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
  5. CONTENT_TYPE —— 请求的正文的MIME 类型。
  6. HTTP_ACCEPT —— 响应可接收的Content-Type
  7. HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
  8. HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
  9. HTTP_HOST —— 客服端发送的HTTP Host 头部。
  10. HTTP_REFERER —— Referring 页面。
  11. HTTP_USER_AGENT —— 客户端的user-agent 字符串。
  12. QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
  13. REMOTE_ADDR —— 客户端的IP 地址。
  14. REMOTE_HOST —— 客户端的主机名。
  15. REMOTE_USER —— 服务器认证后的用户。
  16. REQUEST_METHOD —— 一个字符串,例如"GET" "POST"
  17. SERVER_NAME —— 服务器的主机名。
  18. SERVER_PORT —— 服务器的端口(是一个字符串)。
  19. 从上面可以看到,除 CONTENT_LENGTH CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时,
  20. 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_ 前缀。
  21. 所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。

自定义频率控制器

  1. import time
  2. class Mythorttle():
  3. request_dic = {}
  4. def __init__(self):
  5. self.history = None
  6. def allow_request(self, request, view):
  7. ip = request.META.get('REMOTE_ADDR')
  8. if not ip:return False
  9. ctime = time.time()
  10. if ip not in self.request_dic:
  11. self.request_dic[ip] = [ctime,]
  12. return True
  13. self.history = self.request_dic[ip]
  14. while self.history and ctime - self.history[-1]>60:
  15. self.history.pop()
  16. if len(self.history)>=3:
  17. return False
  18. self.history.insert(0,ctime)
  19. return True
  20. def wait(self):
  21. return 60 - (time.time()-self.history[-1])

drf的内置频率控制器

  1. 写一个类,继承自SimpleRateThrottle,(根据ip限制)问:要根据用户现在怎么写
  2. from rest_framework.throttling import SimpleRateThrottle
  3. class VisitThrottle(SimpleRateThrottle):
  4. scope = 'num'
  5. def get_cache_key(self, request, view):
  6. return self.get_ident(request)
  7. setting里配置:(一分钟访问五次)
  8. REST_FRAMEWORK = {
  9. 'DEFAULT_THROTTLE_RATES':{
  10. 'num':'5/m'
  11. }
  12. }
  13. 在视图类里使用
  14. class Users(ModelViewSet):
  15. # authentication_classes = [Auth, ]
  16. throttle_classes = [VisitThrottle,]
  17. serializer_class = UserSerializer
  18. queryset = UserInfo.objects.all()

错误信息中文显示

  1. class Course(APIView):
  2. authentication_classes = [TokenAuth, ]
  3. permission_classes = [UserPermission, ]
  4. throttle_classes = [MyThrottles,]
  5. def throttled(self, request, wait):
  6. from rest_framework.exceptions import Throttled
  7. class MyThrottled(Throttled):
  8. default_detail = '傻逼啊'
  9. extra_detail_singular = '还剩 {wait} second.'
  10. extra_detail_plural = '还剩 {wait} seconds.'
  11. raise MyThrottled(wait)

内置频率类及全局使用

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_THROTTLE_CLASSES':['app01.utils.VisitThrottle',],
  3. 'DEFAULT_THROTTLE_RATES':{
  4. 'luffy':'3/m'
  5. }
  6. }

drf 频率组件 META字典详情的更多相关文章

  1. drf频率组件

    1.简介 控制访问频率的组件 2.使用 手写一个自定义频率组件 import time #频率限制 #自定义频率组件,return True则可以访问,return False则不能访问 class ...

  2. DRF框架(七) ——三大认证组件之频率组件、jwt认证

    drf频率组件源码 1.APIView的dispatch方法的  self.initial(request,*args,**kwargs)  点进去 2.self.check_throttles(re ...

  3. 【DRF频率】

    目录 使用自带的频率限制类 使用自定义的频率限制类 开发平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. DRF就为我们提供了一些频率限制的方法. DRF中的版本.认证.权限 ...

  4. DRF之权限认证频率组件

    概要 retrieve方法源码剖析 认证组件的使用方式及源码剖析 权限组件的使用方式及源码剖析 频率组件的使用方式及源码剖析 知识点复习回顾 Python逻辑运算 知识点复习回顾一:Python逻辑运 ...

  5. drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件

    RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...

  6. Django框架深入了解_03(DRF之认证组件、权限组件、频率组件、token)

    一.认证组件 使用方法: ①写一个认证类,新建文件:my_examine.py # 导入需要继承的基类BaseAuthentication from rest_framework.authentica ...

  7. drf token刷新配置、认证组件(使用)、权限组件(使用)、频率组件(使用)、异常组件(使用)

    目录 一.特殊路由映射的请求 二.token刷新机制配置(了解) 三.认证组件项目使用:多方式登录 1.urls.py 路由 2.views.py 视图 3.serializers.py 序列化 4. ...

  8. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

  9. drf三大组件之频率认证组件

    复习 """ 1.认证组件:校验认证字符串,得到request.user 没有认证字符串,直接放回None,游客 有认证字符串,但认证失败抛异常,非法用户 有认证字符串, ...

随机推荐

  1. atcoder square869120Contest#3 F 寿司

    省选round1的时候dalao的推荐——atcoder的题目码量不大,但很巧妙,题目比较难找,挂个链冷静一下:http://s8pc-3.contest.atcoder.jp/tasks/s8pc_ ...

  2. redis 拒绝远程访问解决

    启动时报的警告: 1.Warning: no config file specified, using the default config. In order to specify a config ...

  3. 关于float和double类型能表示的数据范围和精度分析

    来自教材<计算机组成原理>p16 float:6--7位 double:15--16位 意思就是double类型的数据,你确实能表达出很大的数字,但是其只有15位是精确的. 1.计算机中, ...

  4. 关于Memcache的连接

    addServer 在说Memcache的长连接(pconnect)和短连接(connect)之前要先说说Memcache的addServer,Memcache的addServer是增加一个服务器到连 ...

  5. [摘录]全面学习GFW

    转载自:https://cokebar.info/archives/253 GFW会是一个长期的存在.要学会与之共存,必须先了解GFW是什么.做为局外人,学习GFW有六个角度.渐进的来看分别是: 首先 ...

  6. ORACLE行转列通用过程(转)

    1.使用视图 SQL code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 create or r ...

  7. DOM操作(二)对元素的操作(创建,追加,删除)

    1 创建新的 HTML 元素 (节点) var divDom=document.createElement('div'); 2 添加新元素到尾部 element.appendChild(para); ...

  8. 集合(Map、可变参数、Collections)

    集合 第1章 Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. l Collection中的集 ...

  9. ParallelsDesktop安装DOS7.1并与MAC共享文件

    ParallelsDesktop安装DOS7.1并与MAC共享文件 Table of Contents 1. 在Parallels Desktop中安装DOS7.1 2. 配置与Mac共享文件 1 在 ...

  10. Sqoop基础学习(1)

    1. Sqoop的导入过程 在开始导入之前,Sqoop会通过JDBC来获得所需要的数据库元数据 1.导入表的列名.数据类型等: 2.接着这些数据库的数据类型(varchar.number等)会把映射成 ...