本文主要是對flask中的before_request與after_request用法做一個簡單的分析,具體實例和介紹如下。
使用before_request 和 after_request的方法都非常簡單,使用 @app.before_request 或者@app.after_request 修飾期望在請求前或請求后執行的函數即可
示例:
@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()函數被修飾以后,每一次請求到來后,都會先執行它,如果沒問題即沒有執行到abort(400),那么就會進入到正常的被app.route修飾的函數中進行響應,如果有多個函數被app.before_request修飾了,那么這些函數會被依次執行。
你很關心這個before_request裝飾器有什么用,其實它的用處非常大,比如我們希望能對ip地址進行過濾,雖然你可以使用nginx,但我們也可以使用before_request來做,使用nginx,我們不得不手動的進行設置,但如果是用flask自身的before_request機制,我們可以在程序判斷出某個ip有惡意訪問行為后將其加入到緩存當中(redis),每次請求到來時,由before_request來判斷這個ip是不是合法的。
被app.after_request修飾過的函數會在請求得到相應后返回給用戶前被調用,也就是說,這個時候,請求已經被app.route裝飾的函數響應過了,已經形成了response,我們在這個時候做一些操作,flask有一個插件叫 flask-compress,是對響應結果進行壓縮的,它就是用after_request的這個機制,在response返回前對數據進行了壓縮,如果你有別的想要操作的事情,同樣可以使用after_request來完成。
總結
以上就是本文關于淺談flask中的before_request與after_request的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答