Django中间件限制用户访问频率

Posted guoyunlong666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中间件限制用户访问频率相关的知识,希望对你有一定的参考价值。

原:https://blog.csdn.net/weixin_38748717/article/details/79095399

一、定义限制访问频率的中间件

  • 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 = 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:]

二、将中间件加入配置文件

  • setting.py
MIDDLEWARE = [
    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中间件限制用户访问频率的主要内容,如果未能解决你的问题,请参考以下文章

django系列8.4--django中间件的可应用案例, 限制请求次数与时间

第七章中间件

基于中间件访问频率限制 每分钟时间间隔最多访问3次

Django框架9

五十django 中间件,csrf跨站请求伪造,auth模块表

django中间件