首页>文档>FastAPI>fastapi中文手册:Body – Schema(模型)

fastapi中文手册:Body – Schema(模型)

fastapi中文手册:Body - Schema(模型)

FastAPI 是一个高性能 Web 框架,用于构建 API。

主要特性:

  • 快速:非常高的性能,与 NodeJS 和 Go 相当
  • 快速编码:将功能开发速度提高约 200% 至 300%
  • 更少的错误:减少约 40% 的人为错误
  • 直观:强大的编辑器支持,自动补全无处不在,调试时间更少
  • 简易:旨在易于使用和学习,减少阅读文档的时间。
  • 简短:减少代码重复。
  • 稳健:获取可用于生产环境的代码,具有自动交互式文档
  • 基于标准:基于并完全兼容 API 的开放标准 OpenAPI 和 JSON Schema 

你同样可以使用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 看到如下:

fastapi中文手册:Body - Schema(模型)

四、概括

  • 你可以使用PydanticSchema为你的模型类去声明额外的验证和元数据
  • 你可以使用额外的关键字参数来传递其他JSON Schema元数据。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索