一文帶你學(xué)會Python?Flask框架設(shè)置響應(yīng)頭
導(dǎo)讀
本篇博客我們將全面了解 Flask 中關(guān)于請求的相關(guān)設(shè)置,開始前你需要先配置 Flask 的基礎(chǔ)框架。
from flask import Flask, make_response app = Flask(__name__) @app.route('/') def index(): response = make_response("Hello, 夢想橡皮擦") response.headers['Content-Type'] = 'text/html; charset=utf-8' return response if __name__ == '__main__': app.run()
運(yùn)行代碼,得到下述效果。
Python Flask 設(shè)置響應(yīng)頭
response.headers 屬性
response.headers 是 Flask 框架中的一個屬性,它是一個字典類型,用于存儲響應(yīng)頭信息。這個屬性可以在視圖函數(shù)中直接使用,用于設(shè)置響應(yīng)頭的信息。
比如在視圖函數(shù)中,可以使用下面的代碼來設(shè)置 Content-Type 響應(yīng)頭:
response.headers['Content-Type'] = 'text/plain'
如果你想要設(shè)置其它響應(yīng)頭,可以使用同樣的方式,例如:
response.headers['X-My-Header'] = 'Xiang_Pi_Ca'
通過開發(fā)者工具,可以查看到自定義的響應(yīng)頭內(nèi)容。
注意,在設(shè)置響應(yīng)頭之前,你需要創(chuàng)建一個響應(yīng)對象。可以使用 flask.make_response() 函數(shù)來創(chuàng)建一個響應(yīng)對象,例如:
from flask import make_response response = make_response("Hello, Xiang_Pi_Ca!") response.headers['Content-Type'] = 'text/plain'
flask.abort() 函數(shù)返回特定狀態(tài)碼
使用 flask.abort() 函數(shù)來返回特定狀態(tài)碼的響應(yīng),并設(shè)置響應(yīng)頭。例如,在請求中包含無效參數(shù)時返回 400 Bad Request:
from flask import Flask, abort app = Flask(__name__) @app.route('/') def index(): # 模擬參數(shù)錯誤 invalid_parameter = True if invalid_parameter: abort(400) return "Hello, Xiang_Pi_Ca!" if __name__ == '__main__': app.run()
代碼運(yùn)行效果:
Flask 中可設(shè)置的響應(yīng)頭參數(shù)
在 Flask 中,你可以設(shè)置任何 HTTP 協(xié)議定義的響應(yīng)頭參數(shù)。
常用的響應(yīng)頭包括:
- Content-Type:用于指定響應(yīng)體的 MIME 類型。例如,'Content-Type': 'text/html' 表示響應(yīng)體是 HTML 文檔。
- Content-Length: 用于指定響應(yīng)體的長度。
- Location:用于重定向。例如,'Location': 'https://pachong.vip' 會導(dǎo)致瀏覽器重定向到 https://pachong.vip。
- Cache-Control: 用于控制緩存,例如,'Cache-Control': 'no-cache' 表示瀏覽器不應(yīng)緩存響應(yīng)。
- Expires: 用于指定緩存過期時間。
- Etag:用于指定資源的 ETag 值。
- Server: 用于指定服務(wù)器的名稱和版本。
- Access-Control-Allow-Origin: 用于控制跨域資源共享。
其他關(guān)于響應(yīng)頭的配置
除了在視圖函數(shù)中設(shè)置響應(yīng)頭之外,F(xiàn)lask 還提供了其他方式來配置響應(yīng)頭。
使用中間件
中間件可以在請求和響應(yīng)之間添加額外的處理。你可以使用中間件來設(shè)置響應(yīng)頭。
中間件是一種在請求和響應(yīng)之間添加額外處理的機(jī)制,可以使用中間件來設(shè)置響應(yīng)頭。
下面的代碼實現(xiàn)了一個中間件,在每個請求之前設(shè)置 Content-Type 和 X-My-Ca 響應(yīng)頭。
from flask import Flask, request,make_response app = Flask(__name__) @app.before_request def before_request(): response = make_response() response.headers['Content-Type'] = 'application/json' response.headers['X-My-Ca'] = 'xiangpica_demo' return response @app.route('/') def index(): return "Hello, 夢想橡皮擦!"
使用裝飾器
裝飾器是一種在不改變視圖函數(shù)本身的情況下添加額外處理的方法。
下面的代碼實現(xiàn)了一個裝飾器,在每個視圖函數(shù)執(zhí)行之前設(shè)置 Content-Type 和 X-My-Ca 響應(yīng)頭。
from flask import Flask, request, make_response from functools import wraps app = Flask(__name__) def set_headers(f): @wraps(f) def decorated_function(*args, **kwargs): response = make_response(f(*args, **kwargs)) response.headers['Content-Type'] = 'application/json' response.headers['X-My-Header'] = 'xiangpica_demo_' return response return decorated_function @app.route('/') @set_headers def index(): return "Hello, 夢想橡皮擦!" if __name__ == '__main__': app.run()
上述代碼可以實現(xiàn)每當(dāng)路由被調(diào)用時,裝飾器都會在視圖函數(shù)之前設(shè)置 Content-Type 和 X-My-Ca 響應(yīng)頭。
使用配置
應(yīng)用程序配置是一種在不修改應(yīng)用程序代碼的情況下更改應(yīng)用程序行為的方法。
from flask import Flask, make_response app = Flask(__name__) app.config.update( RESPONSE_HEADERS={ 'Content-Type': 'application/json', 'X-My-Ca': 'xiangpica_demo_' } ) @app.route('/') def index(): response = make_response() for key, value in app.config['RESPONSE_HEADERS'].items(): response.headers[key] = value return response if __name__ == '__main__': app.run()
上述代碼在配置中定義了 'Content-Type' 和 'X-My-Ca' 兩個響應(yīng)頭,在路由函數(shù)中就可以使用 make_response() 函數(shù)來創(chuàng)建響應(yīng)對象,然后遍歷配置中的響應(yīng)頭來添加響應(yīng)頭了,該寫法的優(yōu)點是,我們可以在不修改應(yīng)用程序代碼的情況下更改響應(yīng)頭, 也可以根據(jù)環(huán)境來設(shè)置不同的響應(yīng)頭。
使用第三方擴(kuò)展
Flask 有許多第三方擴(kuò)展可以幫助你更簡單的配置響應(yīng)頭, 比如 Flask-Cors,F(xiàn)lask-Security 等,這些內(nèi)容以后用單獨的博客進(jìn)行說明。
到此這篇關(guān)于一文帶你學(xué)會Python Flask框架設(shè)置響應(yīng)頭的文章就介紹到這了,更多相關(guān)Python Flask框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 解決空列表.append() 輸出為None的問題
在本篇文章里小編給大家整理了一篇關(guān)于Python 解決空列表.append() 輸出為None的問題的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05Python3 jupyter notebook 服務(wù)器搭建過程
這篇文章主要介紹了Python3 jupyter notebook 服務(wù)器搭建過程,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-11-11Python實現(xiàn)APP自動化發(fā)微信群消息的示例代碼
本文主要介紹了Python實現(xiàn)APP自動化發(fā)微信群消息的示例代,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下碼2022-01-01Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑
如果你需要在 Python 里進(jìn)行文件處理,那么標(biāo)準(zhǔn)庫中的os和os.path兄弟倆一定是你無法避開的兩個模塊,本文主要來和大家聊聊如何使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑,感興趣的可以了解下2023-12-12python 代碼實現(xiàn)k-means聚類分析的思路(不使用現(xiàn)成聚類庫)
這篇文章主要介紹了python 代碼實現(xiàn)k-means聚類分析(不使用現(xiàn)成聚類庫),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Django中數(shù)據(jù)庫的數(shù)據(jù)關(guān)系:一對一,一對多,多對多
今天小編就為大家分享一篇關(guān)于Django中數(shù)據(jù)庫的數(shù)據(jù)關(guān)系:一對一,一對多,多對多,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10