亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python案例中Flask全局配置示例詳解

 更新時(shí)間:2022年12月07日 09:22:20   作者:老邊  
這篇文章主要為大家介紹了python案例中Flask全局配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

WEB服務(wù)全局配置

在目前的開發(fā)過市場(chǎng)當(dāng)中,有很多WEB服務(wù)框架,F(xiàn)lask只是其中之一,但是總體上來看,所有的WEB框架都是依據(jù)HTTP協(xié)議的邏輯從請(qǐng)求到響應(yīng)設(shè)計(jì)的。固然有很多功能是獨(dú)立的,但是也有一部分功能需要全局設(shè)定,比如安全校驗(yàn),比如埋點(diǎn)日志,那么這里就用到了全局配置。

所謂的全局配置,就是在框架全局,請(qǐng)求前后,響應(yīng)前后,設(shè)置的全局配置,比如登錄校驗(yàn),這個(gè)功能并不是針對(duì)單個(gè)頁面,而是針對(duì)所有頁面的操作,當(dāng)然可以一個(gè)頁面一個(gè)頁面的實(shí)現(xiàn),但是更好的辦法就是在請(qǐng)求進(jìn)入視圖之前,就開始校驗(yàn),這樣也可以降低服務(wù)器的部分壓力,那么這樣全局設(shè)置就是一個(gè)很好的方法。

Flask全局配置

flask 同樣也設(shè)置了全局的配置,常用的有以下兩種:

before_request

在請(qǐng)求之前執(zhí)行,一般用在對(duì)請(qǐng)求內(nèi)容的過濾的場(chǎng)景下。一般使用的時(shí)候需要結(jié)合flask本身的request方法。

默認(rèn)采用裝飾器的方式使用

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 #獲取請(qǐng)求用戶ip
    if remote_addr in black_list:
        return "Not Allowed",405 
@app.route("/index")
def index():
    return "index"
if __name__ == '__main__':
    app.run()

這個(gè)時(shí)候,如果采用本地ip訪問,就會(huì)返回405狀態(tài),拒絕訪問。

當(dāng)然也可以不采用裝飾器使用,其實(shí)原理上是一樣的:

類似代碼就全部注釋了,嘿嘿嘿

from flask import Flask
from flask import request
app = Flask(__name__)
#....
app.before_request(ip_filter)
#.... 
if __name__ == '__main__':
    app.run()

after_request

在請(qǐng)求處理完成執(zhí)行,這里可以對(duì)全局的響應(yīng)進(jìn)行配置,比如,全局設(shè)置json響應(yīng)格式,但是需要注意的是after_request的函數(shù)必須設(shè)置參數(shù)接收response對(duì)象,這個(gè)response對(duì)象就是視圖返回的的對(duì)象。

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": #如果返回?cái)?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ù)器啟動(dòng)第一次請(qǐng)求之前執(zhí)行,一般初始化一些數(shù)據(jù)使用
teardown_request比較難理解,直接和請(qǐng)求上下文環(huán)境掛鉤. 只有在請(qǐng)求上下文被 pop 出請(qǐng)求棧的時(shí)候才會(huì)觸發(fā),需要先去看看flask請(qǐng)求上下文
errorhandler發(fā)生錯(cuò)誤時(shí)執(zhí)行,需要提前定義號(hào)錯(cuò)誤句柄,被觸發(fā)的前提是 view_function 中拋出了錯(cuò)誤
template_global前后端不分離,jinja2全局變量,比如用戶狀態(tài)可以設(shè)置在這里
template_filter之前聊過的全局jinja2過濾器

Flask自定義中間件

flask 支持通過自定義類來替換Flask本身的wsgi_app,當(dāng)然,簡(jiǎn)單的修改建議保留原來的wsgi_app對(duì)象

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全局配置示例詳解的詳細(xì)內(nèi)容,更多關(guān)于python Flask全局配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)敲擊木魚積累功德小項(xiàng)目

    Python實(shí)現(xiàn)敲擊木魚積累功德小項(xiàng)目

    最近大家都很流行用手機(jī)敲擊電子木魚積累功德,這在很多短視頻中也常常見到。本文將用Python實(shí)現(xiàn)這一效果,感興趣的小伙伴可以了解一下
    2022-11-11
  • python爬蟲爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù)

    python爬蟲爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù)

    這篇文章主要介紹了python爬蟲如何爬取網(wǎng)頁數(shù)據(jù)并解析數(shù)據(jù),幫助大家更好的利用爬蟲分析網(wǎng)頁,感興趣的朋友可以了解下
    2020-09-09
  • numpy如何取出對(duì)角線元素、計(jì)算對(duì)角線元素和np.diagonal

    numpy如何取出對(duì)角線元素、計(jì)算對(duì)角線元素和np.diagonal

    這篇文章主要介紹了numpy如何取出對(duì)角線元素、計(jì)算對(duì)角線元素和np.diagonal問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python 幾行代碼即可實(shí)現(xiàn)人臉識(shí)別

    Python 幾行代碼即可實(shí)現(xiàn)人臉識(shí)別

    Python中實(shí)現(xiàn)人臉識(shí)別功能有多種方法,依賴于python膠水語言的特性,我們通過調(diào)用包可以快速準(zhǔn)確的達(dá)成這一目的,本文給大家分享使用Python實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別功能的操作步驟,感興趣的朋友一起看看吧
    2022-02-02
  • Python?selenium?八種定位元素的方式

    Python?selenium?八種定位元素的方式

    這篇文章主要介紹了Python?selenium八種定位元素的方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Django配置Mysql數(shù)據(jù)庫連接的實(shí)現(xiàn)

    Django配置Mysql數(shù)據(jù)庫連接的實(shí)現(xiàn)

    本文主要介紹了Django配置Mysql數(shù)據(jù)庫連接的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決

    PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決

    這篇文章主要介紹了PyCharm中Matplotlib繪圖不能顯示UI效果的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法

    python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法

    這篇文章主要介紹了python實(shí)現(xiàn)基本進(jìn)制轉(zhuǎn)換的方法,涉及Python數(shù)學(xué)運(yùn)算的取余與字符串操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python 面試中 8 個(gè)必考問題

    Python 面試中 8 個(gè)必考問題

    這篇文章主要介紹了Python 面試中 8 個(gè)必考問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Python 實(shí)現(xiàn)一行輸入多個(gè)值的方法

    Python 實(shí)現(xiàn)一行輸入多個(gè)值的方法

    下面小編就為大家分享一篇Python 實(shí)現(xiàn)一行輸入多個(gè)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論