W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
FastAPI 默認使用 JSONResponse 返回一個響應(yīng),將你的 路徑操作 中的返回內(nèi)容放到該 JSONResponse 中。
FastAPI 會自動使用默認的狀態(tài)碼或者使用你在 路徑操作 中設(shè)置的狀態(tài)碼。
如果你想要返回主要狀態(tài)碼之外的狀態(tài)碼,你可以通過直接返回一個 Response 來實現(xiàn),比如 JSONResponse,然后直接設(shè)置額外的狀態(tài)碼。
例如,假設(shè)你想有一個 路徑操作 能夠更新條目,并且更新成功時返回 200 「成功」 的 HTTP 狀態(tài)碼。
但是你也希望它能夠接受新的條目。并且當這些條目不存在時,會自動創(chuàng)建并返回 201 「創(chuàng)建」的 HTTP 狀態(tài)碼。
要實現(xiàn)它,導(dǎo)入 JSONResponse,然后在其中直接返回你的內(nèi)容,并將 status_code 設(shè)置為為你要的值。
from typing import Optional
from fastapi import Body, FastAPI, status
from fastapi.responses import JSONResponse
app = FastAPI()
items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}
@app.put("/items/{item_id}")
async def upsert_item(
item_id: str, name: Optional[str] = Body(None), size: Optional[int] = Body(None)
):
if item_id in items:
item = items[item_id]
item["name"] = name
item["size"] = size
return item
else:
item = {"name": name, "size": size}
items[item_id] = item
return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
警告
當你直接返回一個像上面例子中的 Response 對象時,它會直接返回。
FastAPI 不會用模型等對該響應(yīng)進行序列化。
確保其中有你想要的數(shù)據(jù),且返回的值為合法的 JSON(如果你使用 JSONResponse 的話)。
技術(shù)細節(jié)
你也可以使用 from starlette.responses import JSONResponse?!?/p>
出于方便,F(xiàn)astAPI 為開發(fā)者提供同 starlette.responses 一樣的 fastapi.responses。但是大多數(shù)可用的響應(yīng)都是直接來自 Starlette。status 也是一樣。
如果你直接返回額外的狀態(tài)碼和響應(yīng),它們不會包含在 OpenAPI 方案(API 文檔)中,因為 FastAPI 沒辦法預(yù)先知道你要返回什么。
但是你可以使用 額外的響應(yīng) 在代碼中記錄這些內(nèi)容。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: