請求勾子
在客戶端和服務(wù)器交互的過程中,有些準(zhǔn)備工作或掃尾工作需要處理,比如:
創(chuàng)新互聯(lián)公司專注于成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
在請求開始時(shí),建立數(shù)據(jù)庫連接;
在請求開始時(shí),根據(jù)需求進(jìn)行權(quán)限校驗(yàn);
在請求結(jié)束時(shí),指定數(shù)據(jù)的交互格式;
為了讓每個(gè)視圖函數(shù)避免編寫重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請求鉤子。
請求鉤子是通過裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請求鉤子:
before_first_request
在處理第一個(gè)請求前執(zhí)行
before_request
在每次請求前執(zhí)行
如果在某修飾的函數(shù)中返回了一個(gè)響應(yīng),視圖函數(shù)將不再被調(diào)用
after_request
如果沒有拋出錯(cuò)誤,在每次請求后執(zhí)行
接受一個(gè)參數(shù):視圖函數(shù)作出的響應(yīng)
在此函數(shù)中可以對響應(yīng)值在返回之前做最后一步修改處理
需要將參數(shù)中的響應(yīng)在此參數(shù)中進(jìn)行返回
teardown_request:
在每次請求后執(zhí)行
接受一個(gè)參數(shù):錯(cuò)誤信息,如果有相關(guān)錯(cuò)誤拋出
代碼測試
from flask import Flask
from flask import abort
app = Flask(__name__)
# 在第一次請求之前調(diào)用,可以在此方法內(nèi)部做一些初始化操作
@app.before_first_request
def before_first_request():
print("before_first_request")
# 在每一次請求之前調(diào)用,這時(shí)候已經(jīng)有請求了,可能在這個(gè)方法里面做請求的校驗(yàn)
# 如果請求的校驗(yàn)不成功,可以直接在此方法中進(jìn)行響應(yīng),直接return之后那么就不會執(zhí)行視圖函數(shù)
@app.before_request
def before_request():
print("before_request")
# if 請求不符合條件:
# return "laowang"
# 在執(zhí)行完視圖函數(shù)之后會調(diào)用,并且會把視圖函數(shù)所生成的響應(yīng)傳入,可以在此# 方法中對響應(yīng)做最后一步統(tǒng)一的處理
@app.after_request
def after_request(response):
print("after_request")
response.headers["Content-Type"] = "application/json"
return response
# 請每一次請求之后都會調(diào)用,會接受一個(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次請求時(shí)的打?。?br/>before_first_request
before_request
after_request
teardown_request
在第2次請求時(shí)的打?。?br/>before_request
after_request
teardown_request