首頁 > 軟體

一文帶你學會Python Flask框架設定響應頭

2023-01-28 18:01:57

導讀

本篇部落格我們將全面瞭解 Flask 中關於請求的相關設定,開始前你需要先設定 Flask 的基礎框架。

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()

執行程式碼,得到下述效果。

Python Flask 設定響應頭

response.headers 屬性

response.headers 是 Flask 框架中的一個屬性,它是一個字典型別,用於儲存響應頭資訊。這個屬性可以在檢視函數中直接使用,用於設定響應頭的資訊。

比如在檢視函數中,可以使用下面的程式碼來設定 Content-Type 響應頭:

response.headers['Content-Type'] = 'text/plain'

如果你想要設定其它響應頭,可以使用同樣的方式,例如:

response.headers['X-My-Header'] = 'Xiang_Pi_Ca'

通過開發者工具,可以檢視到自定義的響應頭內容。

注意,在設定響應頭之前,你需要建立一個響應物件。可以使用 flask.make_response() 函數來建立一個響應物件,例如:

from flask import make_response

response = make_response("Hello, Xiang_Pi_Ca!")
response.headers['Content-Type'] = 'text/plain'

flask.abort() 函數返回特定狀態碼

使用 flask.abort() 函數來返回特定狀態碼的響應,並設定響應頭。例如,在請求中包含無效引數時返回 400 Bad Request:

from flask import Flask, abort

app = Flask(__name__)


@app.route('/')
def index():
    # 模擬引數錯誤
    invalid_parameter = True
    if invalid_parameter:
        abort(400)
    return "Hello, Xiang_Pi_Ca!"

if __name__ == '__main__':
    app.run()

程式碼執行效果:

Flask 中可設定的響應頭引數

在 Flask 中,你可以設定任何 HTTP 協定定義的響應頭引數。

常用的響應頭包括:

  • Content-Type:用於指定響應體的 MIME 型別。例如,'Content-Type': 'text/html' 表示響應體是 HTML 檔案。
  • Content-Length: 用於指定響應體的長度。
  • Location:用於重定向。例如,'Location': 'https://pachong.vip' 會導致瀏覽器重定向到 https://pachong.vip。
  • Cache-Control: 用於控制快取,例如,'Cache-Control': 'no-cache' 表示瀏覽器不應快取響應。
  • Expires: 用於指定快取過期時間。
  • Etag:用於指定資源的 ETag 值。
  • Server: 用於指定伺服器的名稱和版本。
  • Access-Control-Allow-Origin: 用於控制跨域資源共用。

其他關於響應頭的設定

除了在檢視函數中設定響應頭之外,Flask 還提供了其他方式來設定響應頭。

使用中介軟體

中介軟體可以在請求和響應之間新增額外的處理。你可以使用中介軟體來設定響應頭。

中介軟體是一種在請求和響應之間新增額外處理的機制,可以使用中介軟體來設定響應頭。

下面的程式碼實現了一箇中介軟體,在每個請求之前設定 Content-Type 和 X-My-Ca 響應頭。

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, 夢想橡皮擦!"

使用裝飾器

裝飾器是一種在不改變檢視函數本身的情況下新增額外處理的方法。

下面的程式碼實現了一個裝飾器,在每個檢視函數執行之前設定 Content-Type 和 X-My-Ca 響應頭。

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()

上述程式碼可以實現每當路由被呼叫時,裝飾器都會在檢視函數之前設定 Content-Type 和 X-My-Ca 響應頭。

使用設定

應用程式設定是一種在不修改應用程式程式碼的情況下更改應用程式行為的方法。

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' 兩個響應頭,在路由函數中就可以使用 make_response() 函數來建立響應物件,然後遍歷設定中的響應頭來新增響應頭了,該寫法的優點是,我們可以在不修改應用程式程式碼的情況下更改響應頭, 也可以根據環境來設定不同的響應頭。

使用第三方擴充套件

Flask 有許多第三方擴充套件可以幫助你更簡單的設定響應頭, 比如 Flask-Cors,Flask-Security 等,這些內容以後用單獨的部落格進行說明。

到此這篇關於一文帶你學會Python Flask框架設定響應頭的文章就介紹到這了,更多相關Python Flask框架內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com