Django 对IP访问频率进行限制的例子

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访问频率进行限制的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Django 限制用户访问频率的中间件的实现

    一.定义限制访问频率的中间件 common/middleware.py 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 =

  • Django Rest framework频率原理与限制

    前言 开发平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. DRF就为我们提供了一些频率限制的方法. DRF中的版本.认证.权限.频率组件的源码是一个流程,且频率组件在最后执行. DRF频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们也可以通过自己定义的方法来实现. 当请求进来,走到我们的频率组件时,DRF内部会有一个字典来记录访问者的IP. 以这个字典的IP为key,value为一个列表,存放访问者每次访问的时间:{PI1: [第三次访问时间,

  • django 基于中间件实现限制ip频繁访问过程详解

    额额,标题已经很醒目了,通过中间件去实现,其他方法也可以实现 浏览器前端传来的请求,必须通过中间件,才能到后面路由,视图函数,所以我们在中间件那里做一层处理,我们还需要知道是哪个ip,在什么时候,请求了几次,这些数据是要知道,并且记录下来,所以我创建了一个表,来存放这些信息数据 models文件: class Host_info(models.Model): host = models.CharField(max_length=32) count = models.IntegerField()

  • Django REST framework 如何实现内置访问频率控制

    对匿名用户采用 IP 控制访问频率,对登录用户采用 用户名 控制访问频率. from rest_framework.throttling import SimpleRateThrottle class VisitThrottle(SimpleRateThrottle): """匿名用户访问频率限制""" scope = "AnonymousUser" # 随便写的,可以作为key保存在缓存中 def get_cache_key

  • Django 对IP访问频率进行限制的例子

    REST_FRAMEWORK 配置 对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制 REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser', ), 'DEFAULT_AUTHEN

  • C# 站点IP访问频率限制 针对单个站点的实现方法

    站点IP访问频率限制 针对单个站点 using System; using System.Collections.Generic; using System.IO; //using System.Linq; using System.Web; // <summary> // IP访问频率控制 // </summary> public static class IPCacheManager { /// <summary> /// IP缓存集合 /// </summa

  • Django限制API访问频率常用方法解析

    需求描述: 平台中需要编写接口供第三方调用,需要控制调用频率,需求为5s内调用一次后不得再次调用. 解决思路 1.Django官方插件库中有个django-ratelimit插件可以满足要求, django-ratelimit文档地址,很灵活很强大.只需要在我们的views函数上加上 @ratelimit(key='ip', rate='1/30s', block=True) 装饰器就可以了,网站上的资料不多,大部分都是英文的.在这里稍微解释下参数: key='ip', 必填项,标识按照IP划分

  • Django 限制访问频率的思路详解

    最近做了一个系统由于部分接口需要进行耗时操作,因而不希望用户进行频繁访问,需要进行访问频率限制.如果要自己实现一个访问限制功能相对来说也不会太复杂,并且网上有各种代码可以参考.如果自己不想实现这个代码可以使用 Django Ratelimit. Django Ratelimit is a ratelimiting decorator for Django views. https://travis-ci.org/jsocol/django-ratelimit.png?branch=master

  • nginx配置限制同一个ip的访问频率方法

    1.在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; 2.在需要限制并发数和下载带宽的网站配置server{}里加上如下代码: limit_conn perip 2; limit_conn perserver 20; limit_rate 100k; 补充说明下参数: $binary_rem

  • Go 如何基于IP限制HTTP访问频率的方法实现

    如果你运行 HTTP 服务,并且希望限制 HTTP 的访问频率,那么你可以借助一些比较稳定的工具,例如: github.com/didip/tollbooth.不过如果你构建的应用比较简单,也可以自己来实现. 我们可以使用一个现有的 Go 包 x/time/rate. 本课程,我们将创建一个简单的中间件实现基于 IP 限制 HTTP 访问频率. 简单的 HTTP 服务 让我们从创建一个简单的 HTTP 服务开始,它有非常简单的终端. 但是,因为它的访问频率可能非常高,因此我们要为它添加频率限制.

  • 在nginx中实现单位时间内限制访问频率的教程

    首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出).nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开. 步骤如下: 首先nginx.conf里面添加如下内容: map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } #

  • django允许外部访问的实例讲解

    1.关闭防火墙 service iptables stop 2.设置django 开开启django时,使用0.0.0.0:xxxx,作为ip和端口例如: python manage.py runserver 0.0.0.0:9000 然后在settings里修改ALLOWED_HOSTS = [], 改为ALLOWED_HOSTS = ['*',],注意不要漏掉",". 其他机器就可以通过这台机器的ip和端口号访问django了. 例如:http://192.168.14.40:90

  • Nginx使用limit_req_zone对同一IP访问进行限流的方法

    nginx可以使用ngx_http_limit_req_module模块的limit_req_zone指令进行限流访问,防止用户恶意攻击刷爆服务器.ngx_http_limit_req_module模块是nginx默认安装的,所以直接配置即可. 首先,在nginx.conf文件中的http模块下配置 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 说明:区域名称为one(自定义),占用空间大小为10m,平均处理的请求频率不能超

随机推荐