Flask框架中的綜合認證方案

2021-10-25 07:04:02 字數 2271 閱讀 5306

1.統一處理

**示例:

from flask import flask, session, g

'test'

# 需求1: 所有檢視都需要獲取使用者身份

# 解決辦法: 用鉤子函式進行封裝 減少**冗餘

defprepare()

:# 必須使用g變數來傳遞資料, 使用全域性變數不能記錄併發的多個請求資料

g.name = session.get(

'username'

)'/'

)def

index()

:if g.name:

return

"歡迎回來, %s"

% g.name

else

:return

'首頁'

'/demo1/'

)def

demo1()

:print

(g.name)

return

'demo1'

'/login'

)def

login()

:"""登入"""

session[

'username']=

'zs'

return

'登入成功'

if __name__ ==

'__main__'

:true

)

2.訪問限制

**示例:

from flask import flask, session, g, abort

from functools import wraps

'test'

defprepare()

: g.name = session.get(

'username'

)'/'

)def

index()

:if g.name:

return

"歡迎回來, %s"

% g.name

else

:return

'首頁'

'/login'

)def

login()

:"""登入"""

session[

'username']=

'zs'

return

'登入成功'

# 需求2: 對部分檢視進行訪問限制 如個人中心必須登入才能訪問

# 解決方案: 使用裝飾器封裝訪問限制 減少**冗餘

deflogin_required

(f):

# f = user

def(

*args,

**kwargs)

:# 獲取函式名

print

if g.name:

# 使用者已登入

return f(

*args,

**kwargs)

# 正常訪問檢視函式

else

:# 使用者未登入

abort(

401)

# 400 語法/引數錯誤 401 未認證 403 已認證, 許可權不足 404 資源不存在 405 請求方式不支援 500 伺服器錯誤

'/user'

)@login_required # user = login_required(user)

defuser()

:"""個人中心"""

return

'訪問 %s 的個人中心'

% g.name

if __name__ ==

'__main__'

:print

true

)

補充:

functools.wraps

**示例:

# 使用裝飾器封裝訪問限制 

deflogin_required

(f):

# f = user

@wraps(f)

# 設定該裝飾器後, 可以讓閉包函式使用原函式名, 避免函式標記出現衝突(函式標記是根據函式名來生成的)

def(

*args,

**kwargs)

:if g.name:

return f(

*args,

**kwargs)

else

: abort(

401)

flask 請求鉤子 上下文 綜合認證

1.請求鉤子 請求鉤子就是就是在客戶端發起請求的時候,對各個階段進行監聽和處理,這可以完成一些統一的處理,減少 冗餘。類似於中介軟體或前後置 主要有以下四種請求鉤子 before first request before request after request teardown request ...

Flask 框架的學習

前端時間學習了下flask,準備在這裡記錄一下flask的基礎入門。首先先安裝 pip install flask flask restful 之後建立乙個hello.py 匯入flask類 from flask import flask flask類接收乙個引數 name 裝飾器的作用是將路由對映...

flask框架中增刪改查

資料庫操作 新增資料 根據資料建立模型物件 db.session.add 物件 db.session.commit 更新根據條件找到對應的物件 直接修改物件的屬性值即可 db.session.commit 刪除物理刪除 根據條件找到對應的物件 db.session.delete 物件 db.sess...