python案例中Flask全局配置示例詳解
WEB服務(wù)全局配置
在目前的開發(fā)過市場當中,有很多WEB服務(wù)框架,F(xiàn)lask只是其中之一,但是總體上來看,所有的WEB框架都是依據(jù)HTTP協(xié)議的邏輯從請求到響應(yīng)設(shè)計的。固然有很多功能是獨立的,但是也有一部分功能需要全局設(shè)定,比如安全校驗,比如埋點日志,那么這里就用到了全局配置。
所謂的全局配置,就是在框架全局,請求前后,響應(yīng)前后,設(shè)置的全局配置,比如登錄校驗,這個功能并不是針對單個頁面,而是針對所有頁面的操作,當然可以一個頁面一個頁面的實現(xiàn),但是更好的辦法就是在請求進入視圖之前,就開始校驗,這樣也可以降低服務(wù)器的部分壓力,那么這樣全局設(shè)置就是一個很好的方法。
Flask全局配置
flask 同樣也設(shè)置了全局的配置,常用的有以下兩種:
before_request
在請求之前執(zhí)行,一般用在對請求內(nèi)容的過濾的場景下。一般使用的時候需要結(jié)合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í)行,這里可以對全局的響應(yīng)進行配置,比如,全局設(shè)置json響應(yīng)格式,但是需要注意的是after_request的函數(shù)必須設(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 | 服務(wù)器啟動第一次請求之前執(zhí)行,一般初始化一些數(shù)據(jù)使用 |
| teardown_request | 比較難理解,直接和請求上下文環(huán)境掛鉤. 只有在請求上下文被 pop 出請求棧的時候才會觸發(fā),需要先去看看flask請求上下文 |
| errorhandler | 發(fā)生錯誤時執(zhí)行,需要提前定義號錯誤句柄,被觸發(fā)的前提是 view_function 中拋出了錯誤 |
| template_global | 前后端不分離,jinja2全局變量,比如用戶狀態(tài)可以設(shè)置在這里 |
| 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)容,更多關(guān)于python Flask全局配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python爬蟲爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù)
這篇文章主要介紹了python爬蟲如何爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù),幫助大家更好的利用爬蟲分析網(wǎng)頁,感興趣的朋友可以了解下2020-09-09
numpy如何取出對角線元素、計算對角線元素和np.diagonal
這篇文章主要介紹了numpy如何取出對角線元素、計算對角線元素和np.diagonal問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Django配置Mysql數(shù)據(jù)庫連接的實現(xiàn)
本文主要介紹了Django配置Mysql數(shù)據(jù)庫連接的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決
這篇文章主要介紹了PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
python實現(xiàn)基本進制轉(zhuǎn)換的方法
這篇文章主要介紹了python實現(xiàn)基本進制轉(zhuǎn)換的方法,涉及Python數(shù)學運算的取余與字符串操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07

