帶有中介軟體的登入認證

2022-06-16 08:54:09 字數 4812 閱讀 9188

中介軟體版的登入驗證需要依靠session,所以資料庫中要有django_session表。

先建立乙個mysql的資料庫  

啟動mysql伺服器:  net start mysql

以管理員身份登入: mysql -uroot -p

檢視資料庫: show databases;

建立資料庫: create database db_middle

再去pycharm配置資料庫

databases =

}

跟views在同一級的__init__裡配置

設定session

next_url=request.get.get("

next

") #

獲取跳到登入頁面之前的位址

#如果有,就跳轉回登入之前的url

ifnext_url:

return

redirect(next_url)

else

:

return redirect("

/index/")

return render(request,"

login.html")

deflogout(request):

request.session.delete()

#刪除伺服器的session資料,不刪除cookie

return redirect("

/login/

")

templates

login.html

"en

">

home.html

"en

">"

/logout/

">登出

白名單 black_list=["

/black/

",] #

黑名單def

process_request(self,request):

next_url =request.path_info

print("

path:

",request.path) #

獲取請求路徑資訊

print("

path_info:

",request.path_info) #

路徑資訊 不包含ip和埠、引數

print("

get_full_path:

",request.get_full_path()) #

路徑資訊 + 引數

#黑名單的**愛限制訪問

#白名單的**或者登陸使用者不做限制

#訪問的url在白名單內或者session中有user使用者名稱,則不做阻攔走正常流程

elif next_url in self.white_list or request.session.get("

user"):

return

none

else

:

return redirect("

/login/?next={}

".format(next_url))

再新增乙個中介軟體 限制60秒之內最多嘗試登入3次

#

限制60秒 之內最多只能訪問3次

import

time

class

throttle(middlewaremixin):

defprocess_request(self,request):

#獲取訪問記錄

history = request.session.get("

history",)

#獲取當前時間

now =time.time()

#history [ 9:16:30 , 9:16:35, 9:16:40 ] 9:26:50

#history [ 9:16:40 , 9:16:35, 9:16:30 ,] 9:26:50

while history and now - history[-1] > 60: #

取出history列表中的最後乙個

#如果超過一分鐘 就pop刪除最後乙個

你的訪問頻率太快了,你歇一會")

history.insert(0,now)

#把最新的時間資料插入到history的列表的最前端

request.session[

"history

"]=history #

把最近一次登入的記錄新增到session

也可以根據ip做訪問許可權的限制, 效果同上

#

某些ip訪問伺服器的頻率過高,進行攔截,比如限制 每 10 秒 不能超過 3次。

#通過ip 也可以限制

import

time

visit_dict={}

class

throttle(middlewaremixin):

defprocess_request(self,request):

#獲取ip

ip = request.meta.get("

remote_addr")

#獲取訪問記錄

history =visit_dict.get(ip,)

#沒有訪問記錄

ifnot

history:

visit_dict[ip]=history

#獲取當前時間

now =time.time()

#history [ 9:16:40 , 9:16:35, 9:16:30 ,] 9:26:50

#new =

#for i in history:

#if now - i > 10:##

#for i in new:

#history.remove(i)

#可以用下面的方法代替以上幾行

訪問頻率太快")

history.insert(0,now)

settings   

新增一條自定義中介軟體

Django 中介軟體 登入驗證

django的request請求需要首先經過中介軟體處理,再通過url查詢到對應的views函式進行處理。在settings的middleware classes中 新增設定中介軟體進行啟用,大致原理如下圖所示 在使用django框架進行開發的過程中,遇到乙個問題 要求對覺得多數頁面請求reques...

Django中介軟體(強制登入)

中介軟體 middleware 用於在http請求到達 檢視函式之前 和 檢視函式return之後 django會根據自己的規則在 合適的時機執行中介軟體中相應的方法。常用作view中冗餘功能的抽取,如每個頁面 或某些頁面 在訪問前強制登入。強制登入例項 定義中介軟體 可以新建乙個包 中介軟體中常用...

Django 中介軟體 登入驗證

django的request請求需要首先經過中介軟體處理,再通過url查詢到對應的views函式進行處理。在settings的middleware classes中 新增設定中介軟體進行啟用,大致原理如下圖所示 在使用django框架進行開發的過程中,遇到乙個問題 要求對覺得多數頁面請求reques...