你同样可以使用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
元数据。
网友评论