跳至內容

直接使用 Request 物件

到目前為止,您一直使用其類型宣告您需要的請求部分。

從以下位置取得資料

  • 路徑作為參數。
  • 標頭。
  • Cookie。
  • 等等。

透過這樣做,FastAPI 會自動驗證該資料、轉換它並為您的 API 產生文件。

但在某些情況下,您可能需要直接存取 Request 物件。

關於 Request 物件的詳細資訊

由於 FastAPI 實際上是底層的 Starlette,上面有一層多個工具,因此您可以在需要時直接使用 Starlette 的 Request 物件。

這也意味著,如果您直接從 Request 物件取得資料(例如,讀取主體),FastAPI 將不會驗證、轉換或記錄它(使用 OpenAPI,適用於自動 API 使用者介面)。

儘管任何其他正常宣告的參數(例如,具有 Pydantic 模型的主體)仍會被驗證、轉換、註釋等。

但在某些特定情況下,取得 Request 物件會很有用。

直接使用 Request 物件

假設您想要在路徑操作函式內取得客戶端的 IP 位址/主機。

為此,您需要直接存取請求。

from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

透過宣告類型為 Request路徑操作函式參數,FastAPI 將會知道在該參數中傳遞 Request

提示

請注意,在這種情況下,我們在請求參數旁邊宣告了一個路徑參數。

因此,路徑參數將會被提取、驗證、轉換為指定的類型,並使用 OpenAPI 進行註釋。

同樣地,您可以正常宣告任何其他參數,並且也可以取得 Request

Request 文件

您可以在 Starlette 官方文件網站 中閱讀有關 Request 物件的更多詳細資訊。

「技術細節」

您也可以使用 from starlette.requests import Request

FastAPI 直接提供它只是為了方便您,開發人員。但它直接來自 Starlette。