使用 Pydantic 进行复杂数据结构的校验

心靈之曲
发布: 2025-10-19 09:23:18
原创
761人浏览过

使用 pydantic 进行复杂数据结构的校验

本文将介绍如何使用 Pydantic 在 Python 中校验复杂的嵌套数据结构,特别是包含固定键名和特定类型列表的字典。我们将通过一个 FastAPI 端点示例,展示如何定义 Pydantic 模型来确保输入数据的准确性和一致性。

在构建 API 或处理外部数据时,数据校验是至关重要的一步。Pydantic 是一个强大的 Python 库,它允许我们使用类型提示来定义数据模型,并自动进行数据校验和转换。本文将重点介绍如何使用 Pydantic 校验包含嵌套列表和固定键名的字典结构。

定义 Pydantic 模型

假设我们需要校验如下结构的 JSON 数据:

{
  "filters": {
    "simple": [["str1", "str2", "str3"], ["str4", "str5", "str6"]],
    "combined": [["str7", "str8", "str9"], ["str10", "str11", "str12"]]
  }
}
登录后复制

其中,filters 字段包含一个字典,字典中包含两个固定的键 simple 和 combined。这两个键对应的值都是一个列表,列表中的每个元素又是一个包含三个字符串的列表。

为了使用 Pydantic 校验这种数据结构,我们需要定义相应的 Pydantic 模型。

首先,我们定义一个 SimpleCombine 模型,它包含 simple 和 combined 两个字段,每个字段都是一个字符串列表的列表,且内部的字符串列表长度必须为 3。

from pydantic import BaseModel, conlist
from typing import List

class SimpleCombine(BaseModel):
    simple: List[conlist(str, min_length=3, max_length=3)]
    combined: List[conlist(str, min_length=3, max_length=3)]
登录后复制

在这里,conlist(str, min_length=3, max_length=3) 表示一个字符串列表,且列表的长度必须在 3 到 3 之间(也就是必须是 3)。

即构数智人
即构数智人

即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。

即构数智人36
查看详情 即构数智人

接下来,我们定义一个 Filter 模型,它包含一个 filters 字段,该字段的类型为 SimpleCombine。

class Filter(BaseModel):
    filters: SimpleCombine
登录后复制

使用模型进行校验

现在,我们可以使用这些模型来校验数据了。

data = {
  "filters": {
    "simple": [["str1", "str2", "str3"], ["str4", "str5", "str6"]],
    "combined": [["str7", "str8", "str9"], ["str10", "str11", "str12"]]
  }
}

try:
    validated_data = Filter(**data)
    print("Data is valid:", validated_data)
except Exception as e:
    print("Data is invalid:", e)
登录后复制

如果数据符合模型定义,Pydantic 将会创建一个 Filter 类的实例,并将数据赋值给相应的字段。如果数据不符合模型定义,Pydantic 将会抛出一个异常,其中包含详细的错误信息。

在 FastAPI 中应用

将 Pydantic 模型应用到 FastAPI 端点中,可以方便地进行请求体的校验。

from fastapi import FastAPI
from pydantic import BaseModel, conlist
from typing import List

app = FastAPI()

class SimpleCombine(BaseModel):
    simple: List[conlist(str, min_length=3, max_length=3)]
    combined: List[conlist(str, min_length=3, max_length=3)]

class Filter(BaseModel):
    filters: SimpleCombine

@app.post("/validate")
async def validate_data(filter_data: Filter):
    return {"message": "Data is valid", "data": filter_data}
登录后复制

在这个例子中,我们定义了一个 /validate 端点,它接收一个 Filter 类型的请求体。FastAPI 会自动使用 Pydantic 模型来校验请求体,如果请求体不符合模型定义,FastAPI 将会自动返回一个包含错误信息的 HTTP 响应。

注意事项

  • Pydantic 提供了丰富的校验选项,可以根据实际需求进行配置。例如,可以使用 Field 类来添加更详细的校验规则,如正则表达式、数值范围等。
  • Pydantic 的校验错误信息非常详细,可以帮助开发者快速定位问题。
  • 在定义 Pydantic 模型时,尽量使用类型提示,这样可以提高代码的可读性和可维护性。
  • 可以利用 Pydantic 的 json_schema() 方法生成 JSON Schema,方便与前端或其他系统进行集成。

总结

本文介绍了如何使用 Pydantic 校验复杂的嵌套数据结构,并将其应用到 FastAPI 端点中。通过定义 Pydantic 模型,我们可以方便地进行数据校验,确保输入数据的准确性和一致性,从而提高应用程序的健壮性和可靠性。Pydantic 提供了强大的类型提示和校验功能,使得数据处理变得更加简单和高效。

以上就是使用 Pydantic 进行复杂数据结构的校验的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号