Django 对IP访问频率进行限制的例子


Posted in Python onAugust 30, 2019

REST_FRAMEWORK 配置

对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制

REST_FRAMEWORK = {
   'DEFAULT_PARSER_CLASSES': (
    'rest_framework.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser',
  ),

  'DEFAULT_AUTHENTICATION_CLASSES': (
    # 'lecare.core.rest_auth.CrossSiteSessionAuthentication',
  ),

  'DEFAULT_PERMISSION_CLASSES': [
    # 'rest_framework.permissions.IsAuthenticated',
    'rest_framework.permissions.AllowAny',
  ],

  'PAGE_SIZE': 20,
  'UNICODE_JSON': False,
  # 'COERCE_DECIMAL_TO_STRING': False,
  # 'EXCEPTION_HANDLER': 'lecare.core.custom_exception_handler.custom_exception_handler',
  'JWT_EXPIRATION_DELTA': datetime.timedelta(hours = 2),
  'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days = 360),
  'JWT_ALLOW_REFRESH': False,
  'JWT_AUTH_HEADER_PREFIX': 'JWT',
  'JWT_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_payload_handler',
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_response_payload_handler',
  'JWT_GET_USER_SECRET_KEY': 'consumer.jwt_conf.jwt_get_secret_key',
  # 'DEFAULT_THROTTLE_CLASSES': (
  #   # 开启匿名用户接口请求频率限制
  #   'rest_framework.throttling.AnonRateThrottle',
  #   # 开启授权用户接口请求频率限制
  #   'rest_framework.throttling.UserRateThrottle'
  # ),
  # 'DEFAULT_THROTTLE_RATES': {
  #   # 频率限制有second, minute, hour, day
  #   # 匿名用户请求频率
  #   'anon': '30/second',
  #   # 授权用户请求频率
  #   'user': '30/second'
  # }
}

使用middleware中间件来限制IP频率

import time
from django.utils.deprecation import MiddlewareMixin
MAX_REQUEST_PER_SECOND=2 #每秒访问次数

class RequestBlockingMiddleware(MiddlewareMixin):
  def process_request(self,request):
    now=time.time()
    request_queue = request.session.get('request_queue',[])
    if len(request_queue) < MAX_REQUEST_PER_SECOND:
      request_queue.append(now)
      request.session['request_queue']=request_queue
    else:
      time0=request_queue[0]
      if (now-time0)<1:
        time.sleep(5)
      request_queue.append(time.time())
      request.session['request_queue']=request_queue[1:]

#启用RequestBlocking中间件
IDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'common.middleware.RequestBlockingMiddleware', #在sessions之后,auth之前
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

以上这篇Django 对IP访问频率进行限制的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
解决python3 pika之连接断开的问题
Dec 18 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
Python PIL图片添加字体的例子
Aug 22 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 Python
关于Python3 类方法、静态方法新解
Aug 30 #Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 #Python
简单的Python调度器Schedule详解
Aug 30 #Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 #Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 #Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 #Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 #Python
You might like
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
关于尾递归的使用详解
2013/05/02 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
Node.js文件操作详解
2014/08/16 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python实现rest请求api示例
2014/04/22 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python 内置函数filter
2017/06/01 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python多进程控制学习小结
2018/10/31 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
dpn网络的pytorch实现方式
2020/01/14 Python
Python hashlib模块的使用示例
2020/10/09 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
公务员个人自我评价分享
2013/11/06 职场文书
财务分析个人的自荐书范文
2013/11/24 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
团队精神口号
2014/06/06 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
企业法人授权委托书
2014/09/25 职场文书
刑事申诉状范文
2015/05/20 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书