1、URL訪問過濾
通過裝飾器進行用戶認證非常方便,但是在添加部分需要認證的功能時,就需要再次添加裝飾器,如果通過中間件來實現(xiàn),就不需要再進行添加的操作.
import re LOGIN_URL = '/login/' class MyLogin(MiddlewareMixin): def process_request(self, request): # 獲取當(dāng)前頁面的路由 url = request.get_full_path() path = request.path print(path) # 通過session判斷是否登錄 is_login = request.session.get('is_login') # 判斷當(dāng)前頁面是否是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惡意高頻訪問服務(wù)器,可以對這些IP進行限制,進行攔截.
import time class OverTime(MiddlewareMixin): def process_request(self, request): # 獲取客戶端IP地址 IP = request.META.get('REMOTE_ADDR') # 獲取該IP地址的值,如果沒有,給一個默認列表[] lis = request.session.get(IP, []) # 獲取當(dāng)前時間 curr_time = time.time() # 判斷操作次數(shù)是否小于3次 if len(lis) < 3: # 如果小于3次,添加本次操作時間 lis.append(curr_time) # 保存 request.session[IP] = lis else: # 如果本次操作時間減去第一次操作時間小于60秒,則不讓其繼續(xù)操作 if time.time() - lis[0] < 60: return HttpResponse('操作過于頻繁') else: # 如果大于60秒則交叉復(fù)制 lis[0], lis[1], lis[2] = lis[1], lis[2], time.time() # 保存 request.session[IP] = lis def process_response(self, request, response): return response
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com