flask 中的before_request 與 after_requ
1,使用方式
使用before_request 和 after_request的方法都非常簡單,使用 @app.before_request 或者@app.after_request 修飾期望在請求前或請求後執行的函式即可
2,before_request
before_request()函式被修飾以後,每一次請求到來後,都會先執行它,如果沒問題即沒有執行到abort(400),那麼就會進入到正常的被app.route修飾的函式中進行響應,如果有多個函式被app.before_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裝飾器有什麼用,其實它的用處非常大,比如我們希望能對ip地址進行過濾,雖然你可以使用nginx,但我們也可以使用before_request來做,使用nginx,我們不得不手動的進行設定,但如果是用flask自身的before_request機制,我們可以在程式判斷出某個ip有惡意訪問行為後將其加入到快取當中(redis),每次請求到來時,由before_request來判斷這個ip是不是合法的。
3,after_request
被app.after_request修飾過的函式會在請求得到相應後返回給使用者前被呼叫,也就是說,這個時候,請求已經被app.route裝飾的函式響應過了,已經形成了response,我們在這個時候做一些操作,flask有一個外掛叫 flask-compress,是對響應結果進行壓縮的,它就是用after_request的這個機制,在response返回前對資料進行了壓縮,如果你有別的想要操作的事情,同樣可以使用after_request來完成。
作者:是歸人不是過客
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2730/viewspace-2816391/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【JSON】Python與Flask中涉及到的JSONJSONPythonFlask
- python 中的 flaskPythonFlask
- flask筆記:flask與資料庫的互動Flask筆記資料庫
- Flask中本地棧的使用Flask
- flask中flask-restful是什麼?FlaskREST
- Flask之Jinja2模板與Flask-WTFFlask
- Pycharm中Flask的除錯模式PyCharmFlask除錯模式
- flask框架中的cookie和sessionFlask框架CookieSession
- flask中的csrf防禦機制Flask
- Flask路由與藍圖BlueprintFlask路由
- Flask之 安裝與HelloWorldFlask
- [python][flask] Flask 圖片上傳與下載例子(支援漂亮的拖拽上傳)PythonFlask
- Ajax與Flask傳值的跨域問題Flask跨域
- Flask框架(二):路由與藍圖Flask框架路由
- flask與tornado哪個簡單Flask
- Flask中SQLAlchemy如何安裝?FlaskSQL
- 如何優雅的在flask中記錄logFlask
- 使用Flask-Dropzone在Flask程式中實現檔案上傳Flask
- [譯]Flask教程–重定向與錯誤Flask
- Flask-caching 的快取與刪除 —— 避坑指南Flask快取
- Flask中請求資料的優雅傳遞Flask
- flask筆記:部署flaskFlask筆記
- Flask框架(一):介紹與環境搭建Flask框架
- Flask——路由的使用Flask路由
- Flask——模板的使用Flask
- Flask - Cookie的使用FlaskCookie
- python的flask框架PythonFlask框架
- Flask中怎樣返回html檔案?FlaskHTML
- Flask中Jinja2是什麼?Flask
- 如何在Flask中整合Dash應用Flask
- 如何用Flask中的Blueprints構建大型Web應用FlaskWeb
- flask之控制語句 if 語句與for語句Flask
- Flask 專案中解決csrf攻擊Flask
- Flask系列教程(26)——Flask-ScriptFlask
- 【flask框架】——flask-restful風格Flask框架REST
- flask:flask模板——使用Jinja2Flask
- flask筆記:是flask.ext.sqlalchemy還是flask_sqlalchemyFlask筆記SQL
- day96:flask:flask-migrate&flask-session&藍圖Blueprint&藍圖的執行機制FlaskSession