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