利用中間件判斷鏈接在一段時間只能鏈接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("滾")