1.URL訪問過濾
通過裝飾器進行使用者認證非常方便,但是在新增部分需要認證的功能時,就需要再次新增裝飾器,如果通過中介軟體來實現,就不需要再進行新增的操作.
import re
LOGIN_URL = `/login/`
class MyLogin(MiddlewareMixin):
def process_request(self, request):
# 獲取當前頁面的路由
url = request.get_full_path()
path = request.path
print(path)
# 通過session判斷是否登入
is_login = request.session.get(`is_login`)
# 判斷當前頁面是否是login頁面
if not re.match(path, LOGIN_URL):
if not is_login:
# 如果沒有登入,重定向到login頁面
return redirect(`/login/?next=%s` % url)
def process_response(self, request, response):
return response
2.做IP訪問頻率限制
為了防止某些IP惡意高頻訪問伺服器,可以對這些IP進行限制,進行攔截.
import time
class OverTime(MiddlewareMixin):
def process_request(self, request):
# 獲取客戶端IP地址
IP = request.META.get(`REMOTE_ADDR`)
# 獲取該IP地址的值,如果沒有,給一個預設列表[]
lis = request.session.get(IP, [])
# 獲取當前時間
curr_time = time.time()
# 判斷操作次數是否小於3次
if len(lis) < 3:
# 如果小於3次,新增本次操作時間
lis.append(curr_time)
# 儲存
request.session[IP] = lis
else:
# 如果本次操作時間減去第一次操作時間小於60秒,則不讓其繼續操作
if time.time() - lis[0] < 60:
return HttpResponse(`操作過於頻繁`)
else:
# 如果大於60秒則交叉複製
lis[0], lis[1], lis[2] = lis[1], lis[2], time.time()
# 儲存
request.session[IP] = lis
def process_response(self, request, response):
return response