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爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Sanic框架流式传输操作示例
Jul 18 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python sqlite3查询操作过程解析
Feb 20 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python中的测试框架
Nov 13 Python
Flask处理Web表单的实现方法
Jan 31 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
Python超详细分步解析随机漫步
Mar 17 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
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
Vue组件开发初探
2017/02/14 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
Angular中的$watch方法详解
2017/09/18 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
EJB实例的生命周期
2016/10/28 面试题
生态学毕业生自荐信
2013/10/27 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
生活部的活动方案
2014/08/19 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
总账会计岗位职责
2015/04/02 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书