flask框架中勾子函數(shù)的使用詳解
在客戶端和服務(wù)器交互的過(guò)程中,有些準(zhǔn)備工作或掃尾工作需要處理,比如:
- 在請(qǐng)求開(kāi)始時(shí),建立數(shù)據(jù)庫(kù)連接;
- 在請(qǐng)求開(kāi)始時(shí),根據(jù)需求進(jìn)行權(quán)限校驗(yàn);
- 在請(qǐng)求結(jié)束時(shí),指定數(shù)據(jù)的交互格式;
為了讓每個(gè)視圖函數(shù)避免編寫重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請(qǐng)求鉤子。
請(qǐng)求鉤子是通過(guò)裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請(qǐng)求鉤子:
- before_first_request
- 在處理第一個(gè)請(qǐng)求前執(zhí)行
- before_request
- 在每次請(qǐng)求前執(zhí)行
- 如果在某修飾的函數(shù)中返回了一個(gè)響應(yīng),視圖函數(shù)將不再被調(diào)用
- after_request
- 如果沒(méi)有拋出錯(cuò)誤,在每次請(qǐng)求后執(zhí)行
- 接受一個(gè)參數(shù):視圖函數(shù)作出的響應(yīng)
- 在此函數(shù)中可以對(duì)響應(yīng)值在返回之前做最后一步修改處理
- 需要將參數(shù)中的響應(yīng)在此參數(shù)中進(jìn)行返回
- teardown_request
- 在每次請(qǐng)求后執(zhí)行
- 接受一個(gè)參數(shù):錯(cuò)誤信息,如果有相關(guān)錯(cuò)誤拋出
代碼測(cè)試
from flask import Flask
from flask import abort
app = Flask(__name__)
# 在第一次請(qǐng)求之前調(diào)用,可以在此方法內(nèi)部做一些初始化操作
@app.before_first_request
def before_first_request():
print("before_first_request")
# 在每一次請(qǐng)求之前調(diào)用,這時(shí)候已經(jīng)有請(qǐng)求了,可能在這個(gè)方法里面做請(qǐng)求的校驗(yàn)
# 如果請(qǐng)求的校驗(yàn)不成功,可以直接在此方法中進(jìn)行響應(yīng),直接return之后那么就不會(huì)執(zhí)行視圖函數(shù)
@app.before_request
def before_request():
print("before_request")
# if 請(qǐng)求不符合條件:
# return "laowang"
# 在執(zhí)行完視圖函數(shù)之后會(huì)調(diào)用,并且會(huì)把視圖函數(shù)所生成的響應(yīng)傳入,可以在此方法中對(duì)響應(yīng)做最后一步統(tǒng)一的處理
@app.after_request
def after_request(response):
print("after_request")
response.headers["Content-Type"] = "application/json"
return response
# 請(qǐng)每一次請(qǐng)求之后都會(huì)調(diào)用,會(huì)接受一個(gè)參數(shù),參數(shù)是服務(wù)器出現(xiàn)的錯(cuò)誤信息
@app.teardown_request
def teardown_request(e):
print("teardown_request")
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(debug=True)
在第1次請(qǐng)求時(shí)的打?。?br /> before_first_request
before_request
after_request
teardown_request在第2次請(qǐng)求時(shí)的打?。?br /> before_request
after_request
teardown_request
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Flask框架中request、請(qǐng)求鉤子、上下文用法分析
- Flask之請(qǐng)求鉤子的實(shí)現(xiàn)
- Flask框架工廠函數(shù)用法實(shí)例分析
- flask框架視圖函數(shù)用法示例
- Flask框架實(shí)現(xiàn)給視圖函數(shù)增加裝飾器操作示例
- flask框架jinja2模板與模板繼承實(shí)例分析
- Flask框架模板繼承實(shí)現(xiàn)方法分析
- Flask框架模板渲染操作簡(jiǎn)單示例
- Python的Flask框架中@app.route的用法教程
- Python Web框架Flask下網(wǎng)站開(kāi)發(fā)入門實(shí)例
- Python的Flask框架與數(shù)據(jù)庫(kù)連接的教程
- Flask框架鉤子函數(shù)功能與用法分析
相關(guān)文章
OpenCV學(xué)習(xí)方框?yàn)V波實(shí)現(xiàn)圖像處理代碼示例
這篇文章主要為大家介紹了OpenCV學(xué)習(xí)如何使用方框?yàn)V波實(shí)現(xiàn)對(duì)圖像處理代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
Python urllib.request對(duì)象案例解析
這篇文章主要介紹了Python urllib.request對(duì)象案例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python 對(duì)txt中每行內(nèi)容進(jìn)行批量替換的方法
今天小編就為大家分享一篇python 對(duì)txt中每行內(nèi)容進(jìn)行批量替換的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
python實(shí)現(xiàn)在windows下操作word的方法
這篇文章主要介紹了python實(shí)現(xiàn)在windows下操作word的方法,涉及Python操作word實(shí)現(xiàn)打開(kāi)、插入、轉(zhuǎn)換、打印等操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
python調(diào)用java的Webservice示例
這篇文章主要介紹了python調(diào)用java的Webservice具體方法,包含java端和python實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-03-03
打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)
這篇文章主要介紹了打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2020-02-02
Python文件循環(huán)寫入行時(shí)防止覆蓋的解決方法
今天小編就為大家分享一篇Python文件循環(huán)寫入行時(shí)防止覆蓋的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)
這篇文章主要介紹了Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2016-10-10
django框架中ajax的使用及避開(kāi)CSRF 驗(yàn)證的方式詳解
這篇文章主要介紹了django框架中ajax的使用及避開(kāi)CSRF 驗(yàn)證的方式,結(jié)合實(shí)例形式分析了Django框架ajax后臺(tái)交互與排除驗(yàn)證csrf相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
Python Traceback異常代碼排錯(cuò)利器使用指南
這篇文章主要為大家介紹了Python Traceback異常代碼排錯(cuò)利器使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

