Flask框架請(qǐng)求鉤子與request請(qǐng)求對(duì)象用法實(shí)例分析
本文實(shí)例講述了Flask框架請(qǐng)求鉤子與request請(qǐng)求對(duì)象。分享給大家供大家參考,具體如下:
請(qǐng)求鉤子
在客戶(hù)端和服務(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ù)避免編寫(xiě)重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請(qǐng)求鉤子。
請(qǐng)求鉤子是通過(guò)裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請(qǐng)求鉤子:
| 請(qǐng)求鉤子 | 描述 |
|---|---|
| before_first_request | 在處理第一個(gè)請(qǐng)求前執(zhí)行 |
| before_request | 在處理每一個(gè)請(qǐng)求前執(zhí)行 |
| after_request | 如果沒(méi)有拋出錯(cuò)誤,則在每一次請(qǐng)求后執(zhí)行(接受一個(gè)參數(shù):視圖函數(shù)做出的響應(yīng)) |
| teardown_request | 在每次請(qǐng)求后執(zhí)行(接受一個(gè)參數(shù):用來(lái)接受錯(cuò)誤信息) |
例:
from flask import Flask
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)
第一次訪問(wèn)打印結(jié)果:

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

request對(duì)象
| 屬性 | 說(shuō)明 | 類(lèi)型 |
|---|---|---|
| data | 記錄請(qǐng)求的數(shù)據(jù),并轉(zhuǎn)換為字符串 | * |
| form | 記錄請(qǐng)求中的表單數(shù)據(jù) | MultiDict |
| args | 記錄請(qǐng)求中的查詢(xún)參數(shù) | MultiDict |
| cookies | 記錄請(qǐng)求中的cookie信息 | Dict |
| headers | 記錄請(qǐng)求中的報(bào)文頭 | EnvironHeaders |
| method | 記錄請(qǐng)求使用的HTTP方法 | GET/POST… |
| url | 記錄請(qǐng)求的URL地址 | string |
| files | 記錄請(qǐng)求上傳的文件 | * |
獲取request對(duì)象:
例:
request.url # 請(qǐng)求的url地址
request.args.get("password")) # 獲取不到,返回none,
request.args.get("password","aaa")) # 獲取不到,返回aaa
希望本文所述對(duì)大家基于Flask框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python?包實(shí)現(xiàn)?urllib?網(wǎng)絡(luò)請(qǐng)求操作
這篇文章主要介紹了python包實(shí)現(xiàn)urllib網(wǎng)絡(luò)請(qǐng)求操作,urllib?是?Python?標(biāo)準(zhǔn)庫(kù)中用于網(wǎng)絡(luò)請(qǐng)求的庫(kù),下面urllib的相關(guān)資料介紹,需要的小伙伴可以參考一下2022-04-04
Python開(kāi)發(fā)之城堡保衛(wèi)戰(zhàn)游戲的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何利用Python編寫(xiě)一個(gè)簡(jiǎn)單的城堡保衛(wèi)戰(zhàn)游戲,本文用到了os文件讀寫(xiě),pygame模塊以及面向?qū)ο笏枷?,感興趣的可以了解一下2023-01-01
Python中decimal.Decimal類(lèi)型和float類(lèi)型的比較
這篇文章主要介紹了Python中decimal.Decimal類(lèi)型和float類(lèi)型的比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
淺談Django中的QueryDict元素為數(shù)組的坑
這篇文章主要介紹了淺談Django中的QueryDict元素為數(shù)組的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
基于Python實(shí)現(xiàn)多圖繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多圖繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
如何通過(guò)Python實(shí)現(xiàn)標(biāo)簽云算法
這篇文章主要介紹了如何通過(guò)Python實(shí)現(xiàn)標(biāo)簽云算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python利用pip安裝tar.gz格式的離線(xiàn)資源包
這篇文章主要給大家介紹了關(guān)于Python利用pip安裝tar.gz格式的離線(xiàn)資源包的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
簡(jiǎn)單介紹Python中的readline()方法的使用
這篇文章主要介紹了簡(jiǎn)單介紹Python中的readline()方法的使用,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05

