淺談flask中的before_request與after_request
本文主要是對(duì)flask中的before_request與after_request用法做一個(gè)簡(jiǎn)單的分析,具體實(shí)例和介紹如下。
使用before_request 和 after_request的方法都非常簡(jiǎn)單,使用 @app.before_request 或者@app.after_request 修飾期望在請(qǐng)求前或請(qǐng)求后執(zhí)行的函數(shù)即可
示例:
@app.before_request def before_request(): if not m_ip_range.is_ip_strict(): return ranges = m_ip_range.get_range() ip_int = utils.ip_to_int(request.remote_addr) yes = False for item in ranges: if item['is_used']==0: continue if ip_int >= item['ip_start'] and ip_int <= item['ip_end']: yes = True break if not yes: abort(400)
before_request()函數(shù)被修飾以后,每一次請(qǐng)求到來(lái)后,都會(huì)先執(zhí)行它,如果沒(méi)問(wèn)題即沒(méi)有執(zhí)行到abort(400),那么就會(huì)進(jìn)入到正常的被app.route修飾的函數(shù)中進(jìn)行響應(yīng),如果有多個(gè)函數(shù)被app.before_request修飾了,那么這些函數(shù)會(huì)被依次執(zhí)行。
你很關(guān)心這個(gè)before_request裝飾器有什么用,其實(shí)它的用處非常大,比如我們希望能對(duì)ip地址進(jìn)行過(guò)濾,雖然你可以使用nginx,但我們也可以使用before_request來(lái)做,使用nginx,我們不得不手動(dòng)的進(jìn)行設(shè)置,但如果是用flask自身的before_request機(jī)制,我們可以在程序判斷出某個(gè)ip有惡意訪問(wèn)行為后將其加入到緩存當(dāng)中(redis),每次請(qǐng)求到來(lái)時(shí),由before_request來(lái)判斷這個(gè)ip是不是合法的。
被app.after_request修飾過(guò)的函數(shù)會(huì)在請(qǐng)求得到相應(yīng)后返回給用戶前被調(diào)用,也就是說(shuō),這個(gè)時(shí)候,請(qǐng)求已經(jīng)被app.route裝飾的函數(shù)響應(yīng)過(guò)了,已經(jīng)形成了response,我們?cè)谶@個(gè)時(shí)候做一些操作,flask有一個(gè)插件叫 flask-compress,是對(duì)響應(yīng)結(jié)果進(jìn)行壓縮的,它就是用after_request的這個(gè)機(jī)制,在response返回前對(duì)數(shù)據(jù)進(jìn)行了壓縮,如果你有別的想要操作的事情,同樣可以使用after_request來(lái)完成。
總結(jié)
以上就是本文關(guān)于淺談flask中的before_request與after_request的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
scrapy框架攜帶cookie訪問(wèn)淘寶購(gòu)物車(chē)功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了scrapy框架攜帶cookie訪問(wèn)淘寶購(gòu)物車(chē),本文通過(guò)實(shí)例代碼圖文詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python自動(dòng)化運(yùn)維之Ansible定義主機(jī)與組規(guī)則操作詳解
這篇文章主要介紹了Python自動(dòng)化運(yùn)維之Ansible定義主機(jī)與組規(guī)則操作,結(jié)合實(shí)例形式分析了自動(dòng)化運(yùn)維工具Ansible定義主機(jī)與組規(guī)則相關(guān)配置操作與注意事項(xiàng),需要的朋友可以參考下2019-06-06Python字符串轉(zhuǎn)換成浮點(diǎn)數(shù)函數(shù)分享
本文給大家分享的是一則使用Python實(shí)現(xiàn)字符串轉(zhuǎn)換成浮點(diǎn)數(shù)的代碼,主要是使用map和reduce方法來(lái)實(shí)現(xiàn),有需要的小伙伴可以參考下。2015-07-07python實(shí)現(xiàn)簡(jiǎn)易連點(diǎn)器
本文主要介紹了python實(shí)現(xiàn)簡(jiǎn)易連點(diǎn)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01在pycharm創(chuàng)建scrapy項(xiàng)目的實(shí)現(xiàn)步驟
這篇文章主要介紹了在pycharm創(chuàng)建scrapy項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12