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中实现php的var_dump函数功能
Jan 21 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python实现汉诺塔方法汇总
Jul 25 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python实现邮件自动发送
Aug 10 Python
Python过滤序列元素的方法
Jul 31 Python
Python连接Impala实现步骤解析
Aug 04 Python
Python try except else使用详解
Jan 12 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 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
大师制作的中短波矿石收音机
2020/04/02 无线电
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
List Installed Hot Fixes
2007/06/12 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
一道python走迷宫算法题
2018/01/22 Python
python opencv之分水岭算法示例
2018/02/24 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
C语言中break与continue的区别
2012/07/12 面试题
自我评价范文
2013/12/22 职场文书
个人投资计划书
2014/05/01 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
银行求职自荐信范文
2015/03/04 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
党员转正大会主持词
2015/07/02 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang