python案例中Flask全局配置示例詳解
WEB服務全局配置
在目前的開發(fā)過市場當中,有很多WEB服務框架,F(xiàn)lask只是其中之一,但是總體上來看,所有的WEB框架都是依據(jù)HTTP協(xié)議的邏輯從請求到響應設計的。固然有很多功能是獨立的,但是也有一部分功能需要全局設定,比如安全校驗,比如埋點日志,那么這里就用到了全局配置。
所謂的全局配置,就是在框架全局,請求前后,響應前后,設置的全局配置,比如登錄校驗,這個功能并不是針對單個頁面,而是針對所有頁面的操作,當然可以一個頁面一個頁面的實現(xiàn),但是更好的辦法就是在請求進入視圖之前,就開始校驗,這樣也可以降低服務器的部分壓力,那么這樣全局設置就是一個很好的方法。
Flask全局配置
flask 同樣也設置了全局的配置,常用的有以下兩種:
before_request
在請求之前執(zhí)行,一般用在對請求內(nèi)容的過濾的場景下。一般使用的時候需要結合flask本身的request方法。
默認采用裝飾器的方式使用
from flask import Flask from flask import request app = Flask(__name__) @app.before_request def ip_filter(): black_list = [ "127.0.0.1" ] remote_addr = request.remote_addr #獲取請求用戶ip if remote_addr in black_list: return "Not Allowed",405 @app.route("/index") def index(): return "index" if __name__ == '__main__': app.run()
這個時候,如果采用本地ip訪問,就會返回405狀態(tài),拒絕訪問。
當然也可以不采用裝飾器使用,其實原理上是一樣的:
類似代碼就全部注釋了,嘿嘿嘿
from flask import Flask from flask import request app = Flask(__name__) #.... app.before_request(ip_filter) #.... if __name__ == '__main__': app.run()
after_request
在請求處理完成執(zhí)行,這里可以對全局的響應進行配置,比如,全局設置json響應格式,但是需要注意的是after_request的函數(shù)必須設置參數(shù)接收response對象,這個response對象就是視圖返回的的對象。
from flask import Flask app = Flask(__name__) @app.route("/index") def index(): return {"data": {"nav":["index","news_list"]},"message": "success", "error_code": 1} @app.after_request def after_request_fun(response): response_format = {"data": {},"message": "success", "error_code": 1} if response.content_type == "application/json": #如果返回數(shù)據(jù)的類型是json json_data = response.json response_format.update(json_data) return response # app.after_request(after_request_fun) 第二種寫法 if __name__ == '__main__': app.run()
其他一些全局方法也列在這里吧:
方法 | 描述 |
---|---|
before_first_request | 服務器啟動第一次請求之前執(zhí)行,一般初始化一些數(shù)據(jù)使用 |
teardown_request | 比較難理解,直接和請求上下文環(huán)境掛鉤. 只有在請求上下文被 pop 出請求棧的時候才會觸發(fā),需要先去看看flask請求上下文 |
errorhandler | 發(fā)生錯誤時執(zhí)行,需要提前定義號錯誤句柄,被觸發(fā)的前提是 view_function 中拋出了錯誤 |
template_global | 前后端不分離,jinja2全局變量,比如用戶狀態(tài)可以設置在這里 |
template_filter | 之前聊過的全局jinja2過濾器 |
Flask自定義中間件
flask 支持通過自定義類來替換Flask本身的wsgi_app,當然,簡單的修改建議保留原來的wsgi_app對象
from flask import Flask app = Flask(__name__) @app.route("/index") def index(): return {"data": {"nav":["index","news_list"]},"message": "success", "error_code": 1} class MiddleWare: def __init__(self, old_wsgi_app): self.old_wsgi_app = old_wsgi_app def __call__(self, environ, start_response): print('類似before_request') ret = self.old_wsgi_app(environ, start_response) print('類似after_request') return ret if __name__ == '__main__': app.wsgi_app = MiddleWare(app.wsgi_app) app.run()
以上就是python案例中Flask全局配置示例詳解的詳細內(nèi)容,更多關于python Flask全局配置的資料請關注腳本之家其它相關文章!
相關文章
python爬蟲爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù)
這篇文章主要介紹了python爬蟲如何爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù),幫助大家更好的利用爬蟲分析網(wǎng)頁,感興趣的朋友可以了解下2020-09-09numpy如何取出對角線元素、計算對角線元素和np.diagonal
這篇文章主要介紹了numpy如何取出對角線元素、計算對角線元素和np.diagonal問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Django配置Mysql數(shù)據(jù)庫連接的實現(xiàn)
本文主要介紹了Django配置Mysql數(shù)據(jù)庫連接的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決
這篇文章主要介紹了PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03