溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Flask中的請(qǐng)求鉤子

發(fā)布時(shí)間:2020-02-14 11:10:54 來(lái)源:網(wǎng)絡(luò) 閱讀:480 作者:ck_god 欄目:編程語(yǔ)言

請(qǐng)求勾子
在客戶端和服務(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í)的打印:
before_request
after_request
teardown_request

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI