过於频繁访问服务器,会造成服务器负担,这时必须使用middleware来阻挡,在尚未访问到资料前,就阻挡
创建一个资料夹middleware与app同级
middleware底下创建mymiddleware.py
mymiddleware.py
from django.core.cache import cache
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class MyMiddleware(MiddlewareMixin):
def process_request(self, request):
ip = request.META.get('REMOTE_ADDR')
if request.path == '/app/test/':
result = cache.get(ip)
if result:
return HttpResponse('请10秒後在试')
cache.set(ip, ip, timeout=10)
setting.py注册自订的middleware
MIDDLEWARE = [
'middleware.mymiddleware.MyMiddleware',
单纯的静态网页比较不需要什麽加载时间,对服务器消耗也较少,但是如果试搜寻可能消耗就会比较多
def process_request(self, request):是固定用法
request.META打印出来会是许多关於网页的资讯,像是'REMOTE_ADDR',CONTENT_TYPE,user-agent...
request.path要的是需要添加黑名单的网址(不是所有网页都需要黑名单),也就是127.0.0.1:8000後面的那串
那更好的方法是一分钟不能访问超过n次,因为使用者总是会觉得加载速度很慢,就一直刷新
一开始先确定该ip是否有来访问过
没有就为该ip建一个阵列,来存取时间(time.time())
有就使用快取上纪录ip的arr,
当现在时间减去阵列中的时间,大於60就会将阵列的值pop出来
if request.path == '/app/test/':
arr = []
if cache.get(ip):
arr = cache.get(ip)
while arr and time.time()-arr[-1] > 60:
arr.pop()
arr.append(time.time())
cache.set(ip, arr, timeout=60)
print(arr)
if len(arr) > 10:
return HttpResponse('请求过於频繁,请一分钟後在试')
在新增一些东西就变成黑名单啦
一开始不知道是否有黑名单在快取中,所以要先创建一个black_list,如果有就用原有的black_list
if len(arr) > 20:
black_list.append(ip)
cache.set('black_list', black_list, timeout=60*10)
如果已经告知"请求过於频繁,请一分钟後在试",还是继续访问,就会将该ip添加到黑名单中
if request.path == '/app/test/':
black_list = []
if cache.get('black_list'):
black_list = cache.get('black_list')
if ip in black_list:
return HttpResponse('10分钟禁止访问')
arr = []
if cache.get(ip):
arr = cache.get(ip)
while arr and time.time()-arr[-1] > 60:
arr.pop()
arr.append(time.time())
cache.set(ip, arr, timeout=60)
if len(arr) > 20:
black_list.append(ip)
cache.set('black_list', black_list, timeout=60*10)
print(arr)
if len(arr) > 10:
return HttpResponse('请求过於频繁,请一分钟後在试')
<<: git - 2 ( push github、找插件、token、branch+merge、tag、stash )
想请问一下,公司用了本人一个 excel 档案已经几年了,一般也是自动化处理公司内部一些文件或报告类...
今天是最後一天,咱们今天不看程序码,来谈谈现在我们已经学习了 JavaScript,做个总结顺便想想...
上次学会了有关离散型的机率生活题 今天来说有关连续型的机率生活应用 NORMAL DISTRIBUT...
在写app时常常会因为所有app在外观看起来一样,所以往往会要找很久才能找到自己想要执行的app,所...
How do RWD control columns displaying on devices o...