您好,登錄后才能下訂單哦!
本文實(shí)例講述了Flask框架中request、請(qǐng)求鉤子、上下文用法。分享給大家供大家參考,具體如下:
request
就是flask中代表當(dāng)前請(qǐng)求的request對(duì)象:
常用的屬性如下:
屬性 | 說明 | 類型 |
---|---|---|
data | 記錄請(qǐng)求的數(shù)據(jù),并轉(zhuǎn)換為字符串 | * |
form | 記錄請(qǐng)求中的表單數(shù)據(jù) | MultiDict |
args | 記錄請(qǐng)求中的查詢參數(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)求上傳的文件 | * |
請(qǐng)求勾子
flask的請(qǐng)求鉤子其實(shí)跟django的中間件很類似。
在客戶端和服務(wù)器交互的過程中,有些準(zhǔn)備工作或掃尾工作需要處理,比如:在請(qǐng)求開始時(shí),建立數(shù)據(jù)庫連接;在請(qǐng)求結(jié)束時(shí),指定數(shù)據(jù)的交互格式。為了讓每個(gè)視圖函數(shù)避免編寫重復(fù)功能的代碼,F(xiàn)lask提供了通用設(shè)施的功能,即請(qǐng)求鉤子。
請(qǐng)求鉤子是通過裝飾器的形式實(shí)現(xiàn),F(xiàn)lask支持如下四種請(qǐng)求鉤子:
裝飾器路由的實(shí)現(xiàn)
Flask有兩大核心:Werkzeug和Jinja2
- Werkzeug實(shí)現(xiàn)路由、調(diào)試和Web服務(wù)器網(wǎng)關(guān)接口
- Jinja2實(shí)現(xiàn)了模板。
Werkzeug是一個(gè)遵循WSGI協(xié)議的python函數(shù)庫
- 其內(nèi)部實(shí)現(xiàn)了很多Web框架底層的東西,比如request和response對(duì)象;
- 與WSGI規(guī)范的兼容;支持Unicode;
- 支持基本的會(huì)話管理和簽名Cookie;
- 集成URL請(qǐng)求路由等。
Werkzeug庫的routing模塊負(fù)責(zé)實(shí)現(xiàn)URL解析。不同的URL對(duì)應(yīng)不同的視圖函數(shù),routing模塊會(huì)對(duì)請(qǐng)求信息的URL進(jìn)行解析,匹配到URL對(duì)應(yīng)的視圖函數(shù),以此生成一個(gè)響應(yīng)信息。
routing模塊內(nèi)部有:
- Rule類(用來構(gòu)造不同的URL模式的對(duì)象)
- Map類(存儲(chǔ)所有的URL規(guī)則)
- BaseConverter的子類(負(fù)責(zé)定義匹配規(guī)則)
- MapAdapter類(負(fù)責(zé)具體URL匹配的工作)
上下文
上下文:相當(dāng)于一個(gè)容器,保存了Flask程序運(yùn)行過程中的一些信息。
Flask中有兩種上下文,請(qǐng)求上下文和應(yīng)用上下文。
請(qǐng)求上下文(request context)
Flask從客戶端收到請(qǐng)求時(shí),要讓視圖函數(shù)能訪問一些對(duì)象,這樣才能處理請(qǐng)求。請(qǐng)求對(duì)象是一個(gè)很好的例子,它封裝了客戶端發(fā)送的HTTP請(qǐng)求。
要想讓視圖函數(shù)能夠訪問請(qǐng)求對(duì)象,一個(gè)顯而易見的方式是將其作為參數(shù)傳入視圖函數(shù),不過這會(huì)導(dǎo)致程序中的每個(gè)視圖函數(shù)都增加一個(gè)參數(shù),除了訪問請(qǐng)求對(duì)象,如果視圖函數(shù)在處理請(qǐng)求時(shí)還要訪問其他對(duì)象,情況會(huì)變得更糟。為了避免大量可有可無的參數(shù)把視圖函數(shù)弄得一團(tuán)糟,F(xiàn)lask使用上下文臨時(shí)把某些對(duì)象變?yōu)槿挚稍L問。
應(yīng)用上下文(application context)
它的字面意思是 應(yīng)用上下文,但它不是一直存在的,它只是request context 中的一個(gè)對(duì) app 的代理(人),所謂local proxy。它的作用主要是幫助 request 獲取當(dāng)前的應(yīng)用,它是伴 request 而生,隨 request 而滅的。
應(yīng)用上下文對(duì)象有:current_app,g
current_app
應(yīng)用程序上下文,用于存儲(chǔ)應(yīng)用程序中的變量,可以通過current_app.name打印當(dāng)前app的名稱,也可以在current_app中存儲(chǔ)一些變量,例如:
current_app.name current_app.test_value='value'
g變量
g作為flask程序全局的一個(gè)臨時(shí)變量,充當(dāng)者中間媒介的作用,我們可以通過它傳遞一些數(shù)據(jù),g保存的是當(dāng)前請(qǐng)求的全局變量,不同的請(qǐng)求會(huì)有不同的全局變量,通過不同的thread id區(qū)別
g.name='abc'
兩者區(qū)別:
請(qǐng)求上下文:保存了客戶端和服務(wù)器交互的數(shù)據(jù)
應(yīng)用上下文:flask 應(yīng)用程序運(yùn)行過程中,保存的一些配置信息,比如程序名、數(shù)據(jù)庫連接、應(yīng)用信息等
請(qǐng)求上下文和應(yīng)用上下文原理實(shí)現(xiàn):https://segmentfault.com/a/1190000004223296
希望本文所述對(duì)大家基于flask框架的Python程序設(shè)計(jì)有所幫助。
免責(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)容。