Python高階 Flask鉤子應用場景及使用介紹

2021-08-28 02:18:36 字數 2271 閱讀 9972

在正常執行的**前中後,強行插入執行一段你想要實現的功能的**,這種函式就叫做鉤子函式。鉤子函式就是等同於高速公路上的收費站,進高速之前給你乙個卡,並檢查你是否超重。離開之前收你,也可以攔住你安檢一下。

request: flask的請求上下文,包含請求變數如:method、args、form、values、endpoint、headers、remote_addr都是比較常用的。

session:flask的請求上下文,用於存放使用者的會話資訊。

只在第一次請求之前執行,也就是啟動專案,不會執行,只會在第一次有人發起請求時,才會觸發這個鉤子中的**。

全域性場景:可以帶動乙個非同步執行的函式,進行一些健康指標的檢查,如果發現有異常,則截斷後續的請求,將整個flask應用停止。

def first_request():

print('只有在處理第一次請求之前執行')

全域性的場景包含:共享session的鑑權函式、請求黑白名單過濾、根據endpoint進行請求j等。

藍圖場景包含api的請求必填字段校驗,是否json請求校驗,請求的token校驗等。

api = blueprint('api', __name__)

requied =

# 鉤子 在請求執行之前

@api.before_request

def before_request():

# 請求格式校驗攔截

if not request.is_json:

return '帶引數請求請使用json格式'

# 缺少必填引數攔截

try:

if request.endpoint in requied:

if request.method == "post":

missparam_list = [x for x in requied[request.endpoint] if x.encode('utf8') not in list(parse.parse_qs(request.data).keys())]

else:

missparam_list = [x for x in requied[request.endpoint] if x not in request.json.keys()]

if len(missparam_list) > 0:

return "缺少以下引數:"

except exception as e:

return "".format(e)

當訪問應用出錯時,根據錯誤響應碼,進行一些定製化的操作,如返回乙個可愛的404頁面。也可以進行一些報錯登記。

場景:可以用redis進行錯誤請求計數,超過一定量則進行告警。可以重定向到乙個定製的錯誤**頁面等。

def page_not_found(error):

return render_template('otherpage/404.html'),404

這個鉤子也很實用,是將一些常量按字典的格式返回,則可以在jinja2的模版中引用。這樣就不用在每個檢視函式中都render_template中重複去寫一次。**更簡潔。

def context_rocessor():

return

和上個鉤子類似,差別在於是請求完成時執行,它和之前鉤子有點不同,必須傳入乙個引數來接收響應物件,並在最後return 這個引數,也就是返回響應內容。

場景:一般用於格式化響應結果,包括響應請求頭,響應的格式等。

def after_request(response):

response.headers['jidan'] = 'yaoyao'

return response

和第五個鉤子功能類似,在響應銷毀時,執行乙個繫結的函式。做一些操作。

區別點在於:

after_request: 每乙個請求之後繫結乙個函式,如果請求沒有異常。

teardown_request: 每乙個請求之後繫結乙個函式,即使遇到了異常。

場景:銷毀db連線等。

def teardown_db(exception):

db = getattr(g, 'database', none)

if db is not none:

db.close()

場景:db事務操作。

def teardown(cmd=none):

if cmd is none:

db.session.commit()

else:

db.session.rollback()

db.session.remove()

Flask 請求鉤子

flask中具有四種鉤子被做成了修飾器,我們在後端可以進行呼叫做相關的操作.功能 defindex print 哈哈哈哈 return 哈哈哈 defbefore first request print 這是第乙個鉤子,只在第乙個請求之前呼叫,第乙個請求之後不再呼叫 效果 注意點 在每次請求的之前呼...

Flask 請求鉤子

首先了解下flask設計請求鉤子的作用是什麼,其實請求鉤子就是為了讓每個檢視函式避免編寫重複功能的 設施的功能。其實和scrapy,django中的中介軟體有點相似之處。請求鉤子的設計能夠很有效的提高 的質量,以及實現一些很好的應用場景。falsk有以下幾種鉤子 在處理第乙個請求前執行.應用場景 比...

Flask 請求鉤子

在django中有中介軟體這個類來做一些檢視執行前 執行中 執行後的一些額外業務處理,那麼在flask則是採用請求鉤子的方式來處理。在客戶端和伺服器互動的過程中,有些準備工作或掃尾工作需要處理,比如 在請求開始時,建立資料庫連線 在請求結束時,指定資料的互動格式。為了讓每個檢視函式避免編寫重複功能的...