淺談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)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Python+opencv 實(shí)現(xiàn)圖片文字的分割的方法示例
這篇文章主要介紹了Python+opencv 實(shí)現(xiàn)圖片文字的分割的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python實(shí)現(xiàn)的選擇排序算法原理與用法實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)的選擇排序算法,簡(jiǎn)單描述了選擇排序的原理,并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)與應(yīng)用選擇排序的具體操作技巧,需要的朋友可以參考下2017-11-11
Python使用jsonpath-rw模塊處理Json對(duì)象操作示例
這篇文章主要介紹了Python使用jsonpath-rw模塊處理Json對(duì)象操作,結(jié)合實(shí)例形式分析了Python使用requests與response處理json的方法,并給出了jsonpath_rw模塊操作json對(duì)象的基本示例,需要的朋友可以參考下2018-07-07
10分鐘教你用Python實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
今天,我們就來(lái)用Python實(shí)現(xiàn)微信的自動(dòng)回復(fù)功能吧,并且把接收到的消息統(tǒng)一發(fā)送到文件助手里面,方便統(tǒng)一查看。感興趣的朋友跟隨小編一起看看吧2018-11-11
使用VLC實(shí)現(xiàn)自動(dòng)播放視頻的操作方法
VLC是一款開(kāi)源的多媒體播放器,它支持大量的視頻和音頻格式,并且具有強(qiáng)大的腳本和編程接口,這篇文章主要介紹了使用VLC實(shí)現(xiàn)自動(dòng)播放視頻,需要的朋友可以參考下2024-03-03

