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 相关文章推荐
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
python编码最佳实践之总结
Feb 14 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python button选取本地图片并显示的实例
Jun 13 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
基于pandas中expand的作用详解
Dec 17 Python
如何给Python代码进行加密
Jan 10 Python
Tensorflow累加的实现案例
Feb 05 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
python中pivot()函数基础知识点
Jan 03 Python
教你怎么用Python生成九宫格照片
May 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
PHP数据库开发知多少
2006/10/09 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
Python 字符串操作方法大全
2014/03/11 Python
Python中正则表达式详解
2017/05/17 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
英文自荐信
2013/12/19 职场文书
预备党员思想汇报
2014/01/08 职场文书
销售业务员岗位职责
2014/01/29 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
远程研修随笔感言
2014/02/10 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
环保小标语
2014/06/13 职场文书
电影地道战观后感
2015/06/04 职场文书
吴仁宝观后感
2015/06/09 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python