利用中間件判斷鏈接在一段時間只能鏈接3次,在這段時間內超過3次鏈接則直接返回

利用中間件判斷鏈接在一段時間只能鏈接3次,在這段時間內超過3次鏈接則直接返回

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,render,redirect



limit_dic = {
    "127.0.0.1": [1542252426.783346, 1542252426.23423]
}  #存放ip地址與最新鏈接時間的對應關係
class Limit(MiddlewareMixin):
    def process_request(self, request):
        ip = request.META["REMOTE_ADDR"]  #獲取鏈接的ip
        if not ip in limit_dic:
            limit_dic[ip] = []  #新鏈接過來時,給他從新創建一個對應的列表
        history = limit_dic[ip] #獲得時間列表
        now = time.time()
        while history and now - history[-1] > 60:
          # 首先判斷時間列表裏面是否存在數據,若是不存在數據,說明鏈接已經存在好久,數據被刪除了,或者是一個新來的鏈接;存在數據的話判斷最早鏈接的時間,間隔若是大於60s則會被清空,循環直至時間列表裏面的數據都是60s內的鏈接時間時方止。
            history.pop()
        history.insert(0, now) #將最新的鏈接時間插入到時間列表的第一位
        print(history)
        if len(history) > 3: #判斷時間列表的長度,大於3的話確定是在60s內進來太多的鏈接
            return HttpResponse("滾")
相關文章
相關標籤/搜索