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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
pandas多级分组实现排序的方法
Apr 20 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
20行python代码实现人脸识别
May 05 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Python文件的操作示例的详细讲解
Apr 08 Python
浅谈Python协程asyncio
Jun 20 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/03/04 星际争霸
php正则校验用户名介绍
2008/07/19 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP解决中文乱码
2017/04/28 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
初识Node.js
2014/09/03 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
小学教师的自我评价范例
2013/10/31 职场文书
阿德的梦教学反思
2014/02/06 职场文书
2014年教务工作总结
2014/12/03 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
学习计划是什么
2019/04/30 职场文书
总结python多进程multiprocessing的相关知识
2021/06/29 Python