FastAPI准备之pydantic类型检查工具

  • 官方文档: https://pydantic-docs.helpmanual.io/
  • 这些组织都在用: Jupyter notebook ; FastAPI ; Amazon Web Services ; Uber ; Microsoft
  • 优势: 可以和IDE结合, 可以读取环境变量, 对环境变量做一些检查, 对一些用Python做自动化运维的人来说是福音,比其他的类型检查库要快,可以校验复杂的数据结构(validator),集成到FastAPI框架中写起来会很优雅, Django的DRF也有自己的序列化框架,Golang的Gin框架同样也是.FastAPI和Gin一样优雅, 很喜欢, 并且对扩展开放, 用户可以自定义校验规则
  • 官方的复杂校验案例:
from pydantic import BaseModel, ValidationError, validator

class UserModel(BaseModel):
    name: str
    username: str
    password1: str
    password2: str

    @validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('must contain a space')
        return v.title()

    @validator('password2')
    def passwords_match(cls, v, values, **kwargs):
        if 'password1' in values and v != values['password1']:
            raise ValueError('passwords do not match')
        return v

    @validator('username')
    def username_alphanumeric(cls, v):
        assert v.isalpha(), 'must be alphanumeric'
        return v

print(UserModel(name='samuel colvin', username='scolvin', password1='zxcvbn',
                password2='zxcvbn'))
#> name='Samuel Colvin' username='scolvin' password1='zxcvbn' password2='zxcvbn'

try:
    UserModel(name='samuel', username='scolvin', password1='zxcvbn',
              password2='zxcvbn2')
except ValidationError as e:
    print(e)
"""
2 validation errors for UserModel
name
  must contain a space (type=value_error)
password2
  passwords do not match (type=value_error)
"""
  • 不想用BaseModel可以用优雅的装饰器语法
from datetime import datetime
from pydantic.dataclasses import dataclass

@dataclass
class User:
    id: int
    name: str = 'John Doe'
    signup_ts: datetime = None

user = User(id='42', signup_ts='2032-06-21T12:00')
print(user)
  • 安装上手pip install pydantic
from typing import List
from datetime import datetime
from pydantic import BaseModel, ValidationError


class User(BaseModel):
    id: int
    name = "chr"
    signUp_ts: datetime = None
    friends: List[int] = []


data = {
    "id": 123,
    "signUp_ts": datetime.now(),
    "friends": [1, 2, "a"]  # 这里会将"3"自动转换成int类型,如果不符合类型会自动检查出来抛错
}
try:
    user = User(**data)
except ValidationError as e:
    print(e.json())


# print(user.id)
# print(user.name)
# print(user.signUp_ts)
# print(user.friends)
# print(user.__dict__)
  • 如果不符合类型检查抛错
    在这里插入图片描述

  • 最后附上Benchmark数据(比DRF快了好多啊)

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FastAPI是一个现代、快速(高性能)的Web框架,用于构建API。它基于Python 3.7+的类型提示和异步支持,提供了简单易用的API开发体验。FastAPI具有以下特点: 1. 快速:FastAPI使用基于Starlette的异步请求处理器,可以处理大量并发请求,并具有出色的性能。 2. 类型提示:FastAPI使用Python类型提示功能,可以在编译时进行类型检查,并提供自动生成API文档的功能。 3. 自动文档生成:FastAPI可以根据代码中的类型提示和注释自动生成交互式API文档,包括请求和响应模型、参数验证等。 4. 异步支持:FastAPI完全支持异步编程,可以使用async/await语法编写异步代码,提高性能和并发处理能力。 5. 安全性:FastAPI内置了常见的安全功能,如身份验证、授权等,并提供了易于使用的方式来保护API。 6. 数据验证:FastAPI使用Pydantic库进行数据验证和转换,可以自动解析请求数据,并进行类型检查和转换。 7. WebSocket支持:FastAPI支持WebSocket协议,可以轻松地构建实时应用程序。 Pydantic是一个用于数据验证和解析的Python库,它与FastAPI紧密集成。Pydantic提供了一种声明性的方式来定义数据模型,可以自动进行数据验证、类型转换和文档生成。Pydantic具有以下特点: 1. 声明性:Pydantic使用Python类型提示来定义数据模型,可以在编译时进行类型检查,并提供自动生成文档的功能。 2. 数据验证:Pydantic可以自动验证输入数据的类型、长度、格式等,并提供友好的错误提示。 3. 数据转换:Pydantic可以自动将输入数据转换为指定的类型,如字符串转整数、字符串转日期等。 4. 文档生成:Pydantic可以根据数据模型自动生成文档,包括字段说明、类型信息等。 5. 序列化和反序列化:Pydantic提供了方便的方法来将数据模型转换为JSON、XML等格式,并支持从这些格式解析数据模型。 总结起来,FastAPI是一个快速、现代化的Web框架,而Pydantic是一个用于数据验证和解析的库。它们可以一起使用,提供了简单易用的API开发体验,并自动生成交互式API文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值