亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Flask框架中request、請(qǐng)求鉤子、上下文用法分析

 更新時(shí)間:2019年07月23日 09:33:25   作者:笑-笑-生  
這篇文章主要介紹了Flask框架中request、請(qǐng)求鉤子、上下文用法,結(jié)合實(shí)例形式分析了flask框架中request、請(qǐng)求鉤子及上下文的功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Flask框架中request、請(qǐng)求鉤子、上下文用法。分享給大家供大家參考,具體如下:

request

就是flask中代表當(dāng)前請(qǐng)求的request對(duì)象:

常用的屬性如下:

屬性 說(shuō)明 類型
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ù)器交互的過(guò)程中,有些準(zhǔn)備工作或掃尾工作需要處理,比如:在請(qǐng)求開(kāi)始時(shí),建立數(shù)據(jù)庫(kù)連接;在請(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)求前運(yùn)行。
  • before_request:在每次請(qǐng)求前運(yùn)行。
  • after_request:如果沒(méi)有未處理的異常拋出,在每次請(qǐng)求后運(yùn)行。
  • teardown_request:在每次請(qǐng)求后運(yùn)行,即使有未處理的異常拋出。

裝飾器路由的實(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ù)庫(kù)

- 其內(nèi)部實(shí)現(xiàn)了很多Web框架底層的東西,比如request和response對(duì)象;
- 與WSGI規(guī)范的兼容;支持Unicode;
- 支持基本的會(huì)話管理和簽名Cookie;
- 集成URL請(qǐng)求路由等。

Werkzeug庫(kù)的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類(用來(lái)構(gòu)造不同的URL模式的對(duì)象)
- Map類(存儲(chǔ)所有的URL規(guī)則)
- BaseConverter的子類(負(fù)責(zé)定義匹配規(guī)則)
- MapAdapter類(負(fù)責(zé)具體URL匹配的工作)

上下文

上下文:相當(dāng)于一個(gè)容器,保存了Flask程序運(yùn)行過(guò)程中的一些信息。

Flask中有兩種上下文,請(qǐng)求上下文和應(yīng)用上下文。

請(qǐng)求上下文(request context)

Flask從客戶端收到請(qǐng)求時(shí),要讓視圖函數(shù)能訪問(wèn)一些對(duì)象,這樣才能處理請(qǐng)求。請(qǐng)求對(duì)象是一個(gè)很好的例子,它封裝了客戶端發(fā)送的HTTP請(qǐng)求。

要想讓視圖函數(shù)能夠訪問(wèn)請(qǐng)求對(duì)象,一個(gè)顯而易見(jiàn)的方式是將其作為參數(shù)傳入視圖函數(shù),不過(guò)這會(huì)導(dǎo)致程序中的每個(gè)視圖函數(shù)都增加一個(gè)參數(shù),除了訪問(wèn)請(qǐng)求對(duì)象,如果視圖函數(shù)在處理請(qǐng)求時(shí)還要訪問(wèn)其他對(duì)象,情況會(huì)變得更糟。為了避免大量可有可無(wú)的參數(shù)把視圖函數(shù)弄得一團(tuán)糟,F(xiàn)lask使用上下文臨時(shí)把某些對(duì)象變?yōu)槿挚稍L問(wèn)。

  • request 和 session 都屬于請(qǐng)求上下文對(duì)象。
    • request:封裝了HTTP請(qǐng)求的內(nèi)容,針對(duì)的是http請(qǐng)求。舉例:user = request.args.get('user'),獲取的是get請(qǐng)求的參數(shù)。
    • session:用來(lái)記錄請(qǐng)求會(huì)話中的信息,針對(duì)的是用戶信息。舉例:session['name'] = user.id,可以記錄用戶信息。還可以通過(guò)session.get('name')獲取用戶信息。
  • 當(dāng)調(diào)用app = Flask(name)的時(shí)候,創(chuàng)建了程序應(yīng)用對(duì)象app;
  • request 在每次http請(qǐng)求發(fā)生時(shí),WSGI server調(diào)Flask.call();然后在Flask內(nèi)部創(chuàng)建的request對(duì)象;
  • app的生命周期大于request,一個(gè)app存活期間,可能發(fā)生多次http請(qǐng)求,所以就會(huì)有多個(gè)request。
  • 最終傳入視圖函數(shù),通過(guò)return、redirect或render_template生成response對(duì)象,返回給客戶端。

應(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)用程序中的變量,可以通過(guò)current_app.name打印當(dāng)前app的名稱,也可以在current_app中存儲(chǔ)一些變量,例如:

  • 應(yīng)用的啟動(dòng)腳本是哪個(gè)文件,啟動(dòng)時(shí)指定了哪些參數(shù)
  • 加載了哪些配置文件,導(dǎo)入了哪些配置
  • 連了哪個(gè)數(shù)據(jù)庫(kù)
  • 有哪些public的工具類、常量
  • 應(yīng)用跑再哪個(gè)機(jī)器上,IP多少,內(nèi)存多大
current_app.name
current_app.test_value='value'

g變量

g作為flask程序全局的一個(gè)臨時(shí)變量,充當(dāng)者中間媒介的作用,我們可以通過(guò)它傳遞一些數(shù)據(jù),g保存的是當(dāng)前請(qǐng)求的全局變量,不同的請(qǐng)求會(huì)有不同的全局變量,通過(guò)不同的thread id區(qū)別

g.name='abc'

兩者區(qū)別:

請(qǐng)求上下文:保存了客戶端和服務(wù)器交互的數(shù)據(jù)
應(yīng)用上下文:flask 應(yīng)用程序運(yùn)行過(guò)程中,保存的一些配置信息,比如程序名、數(shù)據(jù)庫(kù)連接、應(yīng)用信息等

請(qǐng)求上下文和應(yīng)用上下文原理實(shí)現(xiàn):https://segmentfault.com/a/1190000004223296

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

相關(guān)文章

  • Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法

    Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法

    這篇文章主要介紹了Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法,涉及Python基于第三方平臺(tái)獲取本機(jī)外網(wǎng)IP的操作技巧,需要的朋友可以參考下
    2016-09-09
  • 深入解析Python中的多進(jìn)程

    深入解析Python中的多進(jìn)程

    這篇文章主要介紹了深入解析Python中的多進(jìn)程,“Python中的多進(jìn)程是通過(guò)multiprocessing包來(lái)實(shí)現(xiàn)的,和多線程的threading.Thread差不多,它可以利用multiprocessing.Process對(duì)象來(lái)創(chuàng)建一個(gè)進(jìn)程對(duì)象
    2022-06-06
  • PyTorch 編寫代碼遇到的問(wèn)題及解決方案

    PyTorch 編寫代碼遇到的問(wèn)題及解決方案

    這篇文章主要介紹了PyTorch 編寫代碼遇到的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-06-06
  • Python字典中items()函數(shù)案例詳解

    Python字典中items()函數(shù)案例詳解

    這篇文章主要介紹了Python字典中items()函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 使用Python創(chuàng)建快捷方式管理應(yīng)用

    使用Python創(chuàng)建快捷方式管理應(yīng)用

    在Windows系統(tǒng)中,快速訪問(wèn)常用程序通常通過(guò)“開(kāi)始菜單”中的“應(yīng)用熱門”功能實(shí)現(xiàn),在這篇博客中,我將向你展示如何使用Python和wxPython創(chuàng)建一個(gè)GUI應(yīng)用,幫助用戶輕松將桌面上的快捷方式添加到Windows“開(kāi)始菜單”的“應(yīng)用熱門”中,需要的朋友可以參考下
    2024-08-08
  • python利用tkinter實(shí)現(xiàn)屏保

    python利用tkinter實(shí)現(xiàn)屏保

    這篇文章主要為大家詳細(xì)介紹了python利用tkinter實(shí)現(xiàn)屏保,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python書(shū)籍信息爬蟲(chóng)實(shí)例

    python書(shū)籍信息爬蟲(chóng)實(shí)例

    這篇文章主要為大家詳細(xì)介紹了python書(shū)籍信息爬蟲(chóng)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 查看已安裝tensorflow版本的方法示例

    查看已安裝tensorflow版本的方法示例

    這篇文章主要介紹了查看已安裝tensorflow版本的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python3 模擬登錄v2ex實(shí)例講解

    python3 模擬登錄v2ex實(shí)例講解

    下面小編就為大家?guī)?lái)一篇python3 模擬登錄v2ex實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • python pandas中DataFrame類型數(shù)據(jù)操作函數(shù)的方法

    python pandas中DataFrame類型數(shù)據(jù)操作函數(shù)的方法

    下面小編就為大家分享一篇python pandas中DataFrame類型數(shù)據(jù)操作函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論