fastapi教程翻译(八):Body - Schema(模型)
2019-10-11 本文已影响0人
warmsirius
你同样可以使用Path,Query和Body声明额外的验证和元数据在路由操作函数中,你可以使用Pydantic中的Schema方法声明验证和元数据
一、Import Schema
1. 导入Schema
from pydantic import BaseModel, Schema
注意:
Schema从pydantic中直接导入,而不是从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
Schema与 Query,Path和Body的工作方式相同,具有相同的参数,等等。
技术细节
实际上,
Query,Path以及接下来将要看到的其他对象是常见的Param的子类,而Param本身就是Pydantic的Schema的子类。但是
Body却直接是Schema的子类. 以及接下来将要看到的其他对象是Body的子类.但是记住,当你从
fastapi导入Query,Path`,他们其实是同一种类下面的函数方法。点击查看.
注意:
类型,默认值和
Schema的 每个模型的属性 与 路由操作函数的参数 具有相同的结构,使用Schema而不是Path,Query和Body。
三、额外模型
在 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 看到如下:
四、概括
- 你可以使用
Pydantic的Schema为你的模型类去声明额外的验证和元数据 - 你可以使用额外的关键字参数来传递其他
JSON Schema元数据。