fastapi学习文档fastapi

fastapi教程翻译(二十二):Additional Stat

2019-12-12  本文已影响0人  warmsirius

默认情况下,FastAPI的响应会使用的,将内容

默认情况下,FastAPI将使用 StarletteJSONResponse 返回响应,将您从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无法事先知道要返回的内容。

但是您可以使用以下代码在代码中进行记录:附加响应

上一篇 下一篇

猜你喜欢

热点阅读