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根据日期返回星期几的方法
Jul 06 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
python Crypto模块的安装与使用方法
Dec 21 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Python pickle模块实现对象序列化
Nov 22 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
解决reload(sys)后print失效的问题
Apr 25 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
Python List remove()实例用法详解
Aug 02 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 项目的方法
2007/01/02 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
JS实现密码框效果
2020/09/10 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Python 忽略warning的输出方法
2018/10/18 Python
python里运用私有属性和方法总结
2019/07/08 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Python验证码截取识别代码实例
2020/05/16 Python
印度购物网站:TATA CLiQ
2017/11/23 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
普通员工辞职信
2014/01/17 职场文书
男方婚前保证书
2015/02/28 职场文书
介绍信范文大全
2015/05/07 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS