新聞中心
FastAPI 默認(rèn)使用 JSONResponse 返回一個響應(yīng),將你的 路徑操作 中的返回內(nèi)容放到該 JSONResponse 中。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供鳳岡企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為鳳岡眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
FastAPI 會自動使用默認(rèn)的狀態(tài)碼或者使用你在 路徑操作 中設(shè)置的狀態(tài)碼。
額外的狀態(tài)碼
如果你想要返回主要狀態(tài)碼之外的狀態(tài)碼,你可以通過直接返回一個 Response 來實(shí)現(xiàn),比如 JSONResponse,然后直接設(shè)置額外的狀態(tài)碼。
例如,假設(shè)你想有一個 路徑操作 能夠更新條目,并且更新成功時返回 200 「成功」 的 HTTP 狀態(tài)碼。
但是你也希望它能夠接受新的條目。并且當(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)你直接返回一個像上面例子中的 Response 對象時,它會直接返回。
FastAPI 不會用模型等對該響應(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 也是一樣。
OpenAPI 和 API 文檔
如果你直接返回額外的狀態(tài)碼和響應(yīng),它們不會包含在 OpenAPI 方案(API 文檔)中,因?yàn)?FastAPI 沒辦法預(yù)先知道你要返回什么。
但是你可以使用 額外的響應(yīng) 在代碼中記錄這些內(nèi)容。
網(wǎng)站名稱:創(chuàng)新互聯(lián)FastAPI教程:FastAPI教程額外的狀態(tài)碼
鏈接分享:http://fisionsoft.com.cn/article/dpdsohp.html


咨詢
建站咨詢
