1.請求鉤子
請求鉤子就是就是在客戶端發起請求的時候,對各個階段進行監聽和處理,這可以完成一些統一的處理,減少**冗餘。類似於中介軟體或前後置
主要有以下四種請求鉤子
before_first_request
before_request
after_request
teardown_request:
鉤子舉例
from flask import flask
"/")
defindex()
:print
("index"
)# a=1/0 為了測試,故意製造錯誤
return
"index"
"/login"
)def
login()
:print
("login"
)return
"login"
# 第一次請求前會被執行
definitial()
:# 一般用於做初始化的工作,不要寫return
print
("before_first_request"
)# 每次請求前都會呼叫
defprocess_request()
:# 用於許可權認證等前置操作,不要寫return
print
("before_request"
)# 每次響應之前都會呼叫
defprocess_response
(response)
:# 引數是響應物件
print
("after_request"
)return response
# 每次響應之前都會呼叫
defrequest_handle
(error)
:# 引數是異常資訊
if error:
print
("error: "
, error)
print
("teardown_request"
)if __name__ ==
'__main__'
:)
2.上下文
上下文:就是乙個資料容器,將flask執行過程中的一些資訊儲存起來
使用範圍:從請求開始到請求結束,在範圍之外使用會報錯
分類:請求上下文、應用上下文
2.1 請求上下文
請求上下文記錄一些跟請求有關的資料,包括request和session
2.2 應用上下文
g:flask給開發者預留的乙個容器,用於記錄自定義資料,比如說鉤子函式與檢視函式之間傳值、函式巢狀傳值等。但是要注意,g變數在每次請求會重置資料
g.username = username # 使用g變數容器傳遞資料
"/")
defindex()
:# *****請求上下文*****
(request.remote_addr)
session[
"user"]=
"pan"
(session.get(
"user"))
# *****應用上下文*****
"json_as_ascii"])
"json_as_ascii"])
(g.username)
# 通過g獲取鉤子函式的變數
return
"index"
if __name__ ==
'__main__':)
3.綜合認證
from flask import flask, session, g, abort
import functools
"asfjpsfasfjoa"
defprocess_user()
: user_name = session.get(
"user_name"
) user_id = session.get(
"user_id"
) g.user_id = user_id
g.user_name = user_name
"/")
defindex()
:print
(g.user_name)
print
(g.user_id)
if g.user_name and g.user_id:
return f"您好,"
else
:return
"登入"
"/login"
)def
login()
: session[
"user_name"]=
"pan"
session[
"user_id"]=
15return
"login success"
deflogin_required
(view_func)
: @functools.wraps(view_func)
def(
*args,
**kwargs)
:if g.user_name and g.user_id:
return view_func(
*args,
**kwargs)
else
: abort(
401)
"/logout"
)def
logout()
: session.clear(
)return
"退出登入成功"
"/comment"
)@login_required
defcomment()
:return
if __name__ ==
'__main__'
:true
)
flask請求鉤子 請求上下文
from flask import flask from flask import redirect,url for,abort 在第一次請求之前呼叫,可以在當前的方法中初始化操作 def before first request print before first request 在每一次請求之...
flask筆記4 上下文與請求鉤子
table of contents 01上下文 02請求鉤子 04 flask script擴充套件命令列 背景 可以直接從request物件獲取引數 django是通過檢視函式傳入request物件,屬於區域性變數 def index request flask中request是全域性變數,多個執...
flask之請求上下文
第一階段 將ctx request,session 放到local物件上 第二階段 檢視函式匯入 request session request.method localproxy物件.method,執行getattr方法,getattr self.get current object name s...