fastapi学习文档fastapi

fastapi教程翻译(八):Body - Schema(模型)

2019-10-11  本文已影响0人  warmsirius

你同样可以使用PathQueryBody声明额外的验证和元数据在路由操作函数中,你可以使用Pydantic中的Schema方法声明验证和元数据

一、Import Schema

1. 导入Schema

from pydantic import BaseModel, Schema 

注意:Schemapydantic中直接导入,而不是从fastapi中导入。

二、声明模型类型

你可以将Schema与模型属性一起使用:

from fastapi import Body, FastAPI
from pydantic import BaseModel, Schema

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = Schema(None, title="The description of the item", max_length=300)
    price: float = Schema(..., gt=0, description="The price must be greater than zero")   
    tax: float = None

@app.put("/items/{item_id}")
async def update_item(
        *, 
        item_id: int,
        item: Item = Body(..., embed=True)
):
    results = {"item_id": item_id, "item": item}
    return results

SchemaQueryPathBody的工作方式相同,具有相同的参数,等等。

技术细节

实际上,QueryPath以及接下来将要看到的其他对象是常见的Param的子类,而Param本身就是PydanticSchema的子类。

但是 Body 却直接是 Schema 的子类. 以及接下来将要看到的其他对象是Body的子类.

但是记住,当你从fastapi导入Query,Path`,他们其实是同一种类下面的函数方法。点击查看.

注意:

类型,默认值和Schema的 每个模型的属性 与 路由操作函数的参数 具有相同的结构,使用Schema而不是PathQueryBody

三、额外模型

Schema中, Path, Query, Body 已经接下来将要看到的其他对象, 你可以声明其他额外的参数。

这些参数将按原样添加到输出JSON Schema。

如果您了解JSON 模型,并且希望添加除此处讨论的内容以外的其他信息,则可以将其作为额外的关键字参数传递。

警告⚠️

注意到额外的参数并不会添加验证,只是一种注释。

例如,您可以使用该功能将JSON模式示例字段传递给 body请求 JSON模式 :

from fastapi import Body, FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.put("/items/{item_id}")
async def update_item(
    *,
    item_id: int,
    item: Item = Body(
        ...,
        example={ "name": "Foo", "description": "A very nice Item", "price": 35.4, "tax": 3.2, },    )
):
    results = {"item_id": item_id, "item": item}
    return results

将会在路径 /docs 看到如下:

四、概括

上一篇 下一篇

猜你喜欢

热点阅读