当前位置: 首页> 房产> 建材 > fastapi之Pydantic

fastapi之Pydantic

时间:2025/7/15 10:09:26来源:https://blog.csdn.net/liudadaxuexi/article/details/141089705 浏览次数:0次

文章目录

  • Pydantic
    • 基本概念
    • 作用
    • 示例
      • 项目结构
        • 创建 Pydantic 模型 (`models.py`)
        • 创建 FastAPI 应用 (main.py)
        • 测试
          • 成功
          • 失败
  • 完整代码

Pydantic

Pydantic 是一个数据验证和数据解析的 Python 库,它基于 Python 的类型注解进行工作。通过 Pydantic,开发者可以定义数据模型,这些模型能够自动验证和转换输入的数据,确保数据的完整性和类型一致性。Pydantic 广泛用于 FastAPI 和其他需要处理复杂数据结构的 Python 应用中。

基本概念

  1. 数据模型:Pydantic使用数据模型来定义数据的结构和类型。数据模型是通过继承 BaseModel 类来创建的。
  2. 字段定义:在 Pydantic 模型中,字段是通过标准的 Python 类型注解来定义的。这些字段可以是基本数据类型(如 intfloatstr)或更复杂的数据结构(如 ListDictOptional)。
  3. 验证和转换:Pydantic 自动验证传入的数据是否符合模型定义的字段类型,并在可能的情况下自动进行类型转换。如果验证失败,Pydantic 会抛出一个验证错误。

作用

  1. 数据验证:自动验证输入数据的类型和格式,确保数据的正确性。
  2. 数据转换:自动将输入数据转换为指定的数据类型(如将字符串转换为数字)。
  3. 文档生成:Pydantic 的模型可用于生成API文档,帮助开发者理解数据结构和格式。
  4. 减少重复代码:通过统一的模型定义和验证逻辑,减少手动编写数据验证代码的需求。

示例

项目结构

myapp/
│
├── main.py          # 主应用文件
├── models.py        # Pydantic 模型定义
├── requirements.txt # 依赖项
└── README.md        # 项目说明
创建 Pydantic 模型 (models.py)
from pydantic import BaseModel
from typing import Optionalclass Item(BaseModel):name: strprice: floatdescription: Optional[str] = Nonetax: Optional[float] = 0.0

Item 是一个 Pydantic 模型,定义了一个商品的数据结构。
nameprice 是必需字段,分别为字符串和浮点数。
descriptiontax 是可选字段,description 的默认值为 Nonetax 的默认值为 0.0

创建 FastAPI 应用 (main.py)

from fastapi import FastAPI
from .models import Itemimport uvicorn
import osapp = FastAPI()@app.post("/items/")
def create_item(item: Item):"""创建一个新的商品条目。"""return {"item": item}if __name__ == "__main__":uvicorn.run(f"{os.path.basename(__file__).split('.')[0]}:app",host="127.0.0.1",port=8000,reload=True,)
  • 在这个 FastAPI 应用中,定义了一个 POST 端点 /items/,它接收一个 Item 类型的请求体。
  • FastAPI 会自动使用 Pydantic 来验证和解析请求中的数据。如果请求的数据不符合 Item 模型的定义,FastAPI 会返回一个详细的错误响应。
  • 如果验证通过,传入的 Item 数据会作为响应返回。
测试
成功

在这里插入图片描述

失败

在这里插入图片描述

完整代码

fastapi之Pydantic

可评论区留言私发。

关键字:fastapi之Pydantic

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: