import time
IP_PULL = {}
def func(fun):
def fff(request):
now_time = time.time()
ip = request.META.get('REMOTE_ADDR') # 获取访问者ip
if ip not in IP_PULL: # 判断ip是否不存在
IP_PULL[ip] = [now_time] # 不存在则添加
his = IP_PULL.get(ip) # 获取ip上次访问的时间,返回一个列表
while his and now_time - his[-1] > 1: # 当his存在,并且距离第一次访问时间大于1秒时丢出
his.pop()
if len(his) < 3: # 一秒内访问小于3次,将当前时间插入列表第一位
his.insert(0,now_time)
return fun(request)
else:
request.session['ipname'] = ip # 将ip存入session,在通过session过期时间,设置禁网时间
request.session.set_expiry(300)
return http.HttpResponseForbidden()
return fff
def blacks(func): # 设置黑名单
def writes(request):
ip = request.META.get('REMOTE_ADDR')
black = request.session.get('ipname')
print(black,type(black))
if ip == black:
return http.HttpResponse("封你300秒")
else:
return func(request)
return writes
Django————简易的IP筛选
最新推荐文章于 2021-07-05 20:22:26 发布