Django 中介軟體實現使用者認證與IP頻率限制
阿新 • • 發佈:2018-11-23
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