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套接字流重定向实例汇总
Mar 03 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
python组合无重复三位数的实例
Nov 13 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
python gdal安装与简单使用
Aug 01 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
python 使用建议与技巧分享(四)
Aug 18 Python
python中time.ctime()实例用法
Feb 03 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 删除cookie和浏览器重定向
2009/03/16 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
使用tensorflow实现线性svm
2018/09/07 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python顺序执行多个py文件的方法
2019/06/29 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
Python中常用的os操作汇总
2020/11/05 Python
python安装sklearn模块的方法详解
2020/11/28 Python
英国网上花店:Bunches
2016/11/29 全球购物
电气自动化自荐信
2013/10/10 职场文书
什么是岗位职责
2013/11/12 职场文书
妇产医师自荐信
2014/01/29 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
工会工作先进事迹
2014/08/18 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
公司周年庆典标语
2014/10/07 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL