老卫带你学---pydantic介绍

Pydantic 是一个 Python 库,它提供了一种简单方便的方法来验证和操作数据。它的创建是为了帮助简化数据验证过程并提高开发人员的效率。 Pydantic 与 Python 的数据结构无缝集成,并提供灵活且用户友好的 API 来定义和验证数据。使用 Pydantic,开发人员可以定义他们的数据结构和验证规则,库将自动验证传入数据并在不满足任何规则时引发错误。这有助于确保项目中使用的数据是一致的并符合要求的标准。

Pydantic 提供 BaseModel 让开发者能够通过继承该类并且利用 typing 注记类别属性的数据类型,保证我们不用写过多的代码就拥有基本的数据验证功能。

定义模型时,被用作请求主体对象和请求-响应对象的类型提示。在本文中,我们将简单看一下在请求体中使用 Pydantic 模型来处理 POST 请求。

Pydantic 安装

pip install pydantic

但是如果你是直接安装好了 FastAPI ,这一步可以跳过,因为 FastAPI 框架就使用了 Pydantic。

Pydantic 优点

易于使用: Pydantic 很容易安装与使用,并且有一个简单的 API,使得所有开发者都可以快速上手使用。

快速验证: Pydantic 快速有效地执行数据验证,使其适合于在高性能的应用程序中使用。

自动生成文档: Pydantic 可以为你的数据模型自动生成文档,节省时间,并且更容易理解你的数据结构。

类型提示支持: Pydantic 支持类型提示,使开发人员更容易定义数据结构,避免在代码中出现错误。

与 FastAPI 集成: Pydantic 可以很容易地与 FastAPI(一个高性能的 Python 网络框架)集成,为 API 提供自动请求和响应验证。

自定义验证规则: Pydantic 允许开发人员定义自定义的验证规则,使得在需要的时候可以实现复杂的验证逻辑。

一致的数据: Pydantic 确保项目中使用的数据是一致的,并符合所需的标准,减少了错误的风险,使代码库的维护更加容易。

什么是类型注解

Python 是动态类型的语言,所以在同一个命名空间中,变量的值可以是字符串也可以是数组,比如:

>>> x = 4
>>> type(x)
<class 'int'>
>>> x = "hello, 宇宙之一粟"
>>> type(x)
<class 'str'>

大约在 Python 3.5 起引入了 type hints 类型注解,虽然 Python 在运行时不强制执行函数和变量类型注解,但这些注解可用于类型检查器、IDE、静态检查器等第三方工具,这些工具就可以帮助我们侦测类型上的错误。

最简单的注解方式如下:

def hello(name: str) -> str:
    return 'Hello ' + name

利用 Pydantic 定义模型

我们在定义如下 Book 模型的时候,我们声明了 id 为数字类型,Name 到 ISBN 都为字符串类型,Tags 为列表类型,通过继承自 BaseModel 的特性,Pydantic 会自动帮我们验证型态的正确性:

from pydantic import BaseModel

class Book(BaseModel):
    id: int
    Name: str
    Author: str
    Publisher: str
    ISBN: str
    Tags: list[str]


HeadFirstPython = Book(
    id = 1,
    Name = 'Head First Python, 2nd Edition',
    Author = 'Paul Barry',
    Publisher ="O'Reilly Media, Inc.",
    ISBN = "9781491919538",
    Tags = ["Python", "Head Frist"]
)

如果这样定义之后,我们的上述的 HeadFirstPython 不会报任何错误,但是如果我们的 id 还没定义,如下:

from pydantic import BaseModel

class Book(BaseModel):
    id: int
    Name: str
    Author: str
    Publisher: str
    ISBN: str
    Tags: list[str]


HeadFirstPython = Book(
    id = "notdefineyet",
    Name = 'Head First Python, 2nd Edition',
    Author = 'Paul Barry',
    Publisher ="O'Reilly Media, Inc.",
    ISBN = "9781491919538",
    Tags = ["Python", "Head Frist"]
)

但是如果你定义 id 为 id = “1”, 则不会报错,因为 Pydantic 帮助我们自动实现了类型转换,如果想要严格控制 int 类型,需要导入 StrictInt,StrictString 同理,代码如下:

from pydantic import BaseModel, StrictInt, StrictStr

class Book(BaseModel):
    # id: int
    id: StrictInt
    # Name: str
    Name: StrictStr
    Author: str
    Publisher: str
    ISBN: str
    Tags: list[str]


HeadFirstPython = Book(
    # id = "1",
    id = 1,
    # Name = 'Head First Python, 2nd Edition',
    Name = 27546, # 此处会报错,
    Author = 'Paul Barry',
    Publisher ="O'Reilly Media, Inc.",
    ISBN = "9781491919538",
    Tags = ["Python", "Head Frist", 1]
)

print(‘output>’, HeadFirstPython.dict())

pydantic.error_wrappers.ValidationError: 1 validation error for Book
Name
  str type expected (type=type_error.str)

pydantic 的工作方式

Pydantic 的工作方式是允许开发人员使用 Python 类来定义数据模型。这些类继承自 Pydantic 提供的 BaseModel 类,可以包括类型提示、默认值和验证规则。当收到数据时,Pydantic 使用数据模型来验证传入的数据,并确保其符合所定义的要求。

在验证过程中,Pydantic 对照数据模型中定义的类型提示和验证规则,检查数据中的每个字段。如果数据不符合要求,Pydantic 会提出一个错误,并停止验证过程。如果数据是有效的,Pydantic 就会创建一个数据模型的实例,用传入的数据来填充它,并将其返回给用户。

Pydantic 还提供了一些高级功能,例如字段别名,自定义验证函数,以及对嵌套数据模型的支持,使得它可以处理广泛的数据验证场景。此外,Pydantic 支持序列化和反序列化,允许根据需要将数据转换为 Python 数据结构、JSON 和其他格式。

总结

本文介绍了 Pydantic 以及它的安装与工作方式, Pydantic 提供了自动的数据验证,提高了性能,并且支持复杂的数据结构,使得构建健壮和可维护的应用程序更加容易。虽然本文只是简单的校验数据的存在性,还有更多比如邮箱、密码格式等等, Pydantic 都会提供,希望本文抛砖引玉,让大家探索和学习 Pydantic 的更多功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值