
本文将介绍如何使用 Pydantic 在 Python 中校验复杂的嵌套数据结构,特别是包含固定键名和特定类型列表的字典。我们将通过一个 FastAPI 端点示例,展示如何定义 Pydantic 模型来确保输入数据的准确性和一致性。
在构建 API 或处理外部数据时,数据校验是至关重要的一步。Pydantic 是一个强大的 Python 库,它允许我们使用类型提示来定义数据模型,并自动进行数据校验和转换。本文将重点介绍如何使用 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)。
接下来,我们定义一个 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 将会抛出一个异常,其中包含详细的错误信息。
将 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 校验复杂的嵌套数据结构,并将其应用到 FastAPI 端点中。通过定义 Pydantic 模型,我们可以方便地进行数据校验,确保输入数据的准确性和一致性,从而提高应用程序的健壮性和可靠性。Pydantic 提供了强大的类型提示和校验功能,使得数据处理变得更加简单和高效。
以上就是使用 Pydantic 进行复杂数据结构的校验的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号