溫馨提示×

溫馨提示×

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

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

Flask框架請求鉤子與request請求對象用法實例分析

發(fā)布時間:2020-09-29 03:56:01 來源:腳本之家 閱讀:246 作者:HMMHMH 欄目:開發(fā)技術(shù)

本文實例講述了Flask框架請求鉤子與request請求對象。分享給大家供大家參考,具體如下:

請求鉤子

在客戶端和服務(wù)器交互的過程中,有些準(zhǔn)備工作或掃尾工作需要處理,比如:

  • 在請求開始時,建立數(shù)據(jù)庫連接
  • 在請求開始時,根據(jù)需求進(jìn)行權(quán)限校驗
  • 在請求結(jié)束時,指定數(shù)據(jù)的交互格式

為了讓每個視圖函數(shù)避免編寫重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請求鉤子。

請求鉤子是通過裝飾器的形式實現(xiàn),F(xiàn)lask支持如下四種請求鉤子:

請求鉤子 描述
before_first_request 在處理第一個請求前執(zhí)行
before_request 在處理每一個請求前執(zhí)行
after_request 如果沒有拋出錯誤,則在每一次請求后執(zhí)行(接受一個參數(shù):視圖函數(shù)做出的響應(yīng))
teardown_request 在每次請求后執(zhí)行(接受一個參數(shù):用來接受錯誤信息)

例:

from flask import Flask
app = Flask(__name__)
# 在第一次請求之前調(diào)用,可以在此方法內(nèi)部做一些初始化操作
@app.before_first_request
def before_first_request():
  print("before_first_request")
# 在每次請求之前調(diào)用,這時候已經(jīng)有請求了,可能在這個方法里面做請求的校驗
# 如果請求的校驗不成功,可以直接在此方法中進(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)用,會接受一個參數(shù),參數(shù)是服務(wù)器出現(xiàn)的錯誤信息
@app.teardown_request
def teardown_request(e):
  print("teardown_request")
@app.route('/')
def index():
  return 'index'
if __name__ == '__main__':
  app.run(debug=True)

第一次訪問打印結(jié)果:

Flask框架請求鉤子與request請求對象用法實例分析

第二次訪問打印結(jié)果:

Flask框架請求鉤子與request請求對象用法實例分析

request對象

屬性 說明 類型
data 記錄請求的數(shù)據(jù),并轉(zhuǎn)換為字符串 *
form 記錄請求中的表單數(shù)據(jù) MultiDict
args 記錄請求中的查詢參數(shù) MultiDict
cookies 記錄請求中的cookie信息 Dict
headers 記錄請求中的報文頭 EnvironHeaders
method 記錄請求使用的HTTP方法 GET/POST…
url 記錄請求的URL地址 string
files 記錄請求上傳的文件 *

獲取request對象:

例:

request.url # 請求的url地址
request.args.get("password")) # 獲取不到,返回none,
request.args.get("password","aaa")) # 獲取不到,返回aaa

希望本文所述對大家基于Flask框架的Python程序設(shè)計有所幫助。

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

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

AI