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中使用ConfigParser解析ini配置文件实例
Aug 30 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Python yield 使用方法浅析
May 20 Python
java中两个byte数组实现合并的示例
May 09 Python
深入理解Django自定义信号(signals)
Oct 15 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
django中cookiecutter的使用教程
Dec 03 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
python 下划线的多种应用场景总结
May 12 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现把数字转换成中文
2015/06/29 Python
利用python代码写的12306订票代码
2015/12/20 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python实现简易学生信息管理系统
2020/04/05 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
自荐书封面下载
2013/11/29 职场文书
中学教师培训制度
2014/01/31 职场文书
物理力学求职信
2014/02/18 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
咖啡店创业计划书
2014/08/15 职场文书
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技