默认情况下,FastAPI的响应会使用的,将内容
默认情况下,FastAPI将使用 Starlette
的 JSONResponse
返回响应,将您从path操作返回的内容放在 JSONResponse
中。
它将使用默认状态码或您在path操作中设置的状态码。
一、额外的状态码
如果您要返回除主代码之外的其他状态代码,可以通过直接返回诸如JSONResponse
之类的Response
并直接设置其他状态代码来实现。
例如,假设您要执行path操作,该操作可以更新项目,并在成功时返回200“ OK”的HTTP状态代码。
但是您也希望它接受新项目。 并且当这些项目以前不存在时,它将创建它们,并返回HTTP状态代码201“已创建”。
为此,请导入JSONResponse
,然后直接返回您的内容,并设置所需的status_code
:
from fastapi import Body, FastAPI
from starlette.responses import JSONResponse from starlette.status import HTTP_201_CREATED
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: str = Body(None),
size: 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=HTTP_201_CREATED, content=item)
警告⚠️
如上例所示,当您直接返回Response
时,它将直接返回。
不会与模型等序列化。
确保它具有所需的数据,并且 值是有效的JSON(如果使用的是JSONResponse
)。
二、OpenAPI and API 文档
如果您直接返回其他状态代码和响应,则它们将不会包含在OpenAPI架构(API文档)中,因为FastAPI无法事先知道要返回的内容。
但是您可以使用以下代码在代码中进行记录:附加响应。
网友评论