Skip to content

Web 和 API 请求

Pydantic 模型是验证和序列化请求与响应数据的绝佳方式。 Pydantic 在许多 Web 框架和库中发挥着重要作用,例如 FastAPI、Django、Flask 和 HTTPX。

httpx 请求

httpx 是一个用于 Python 3 的 HTTP 客户端,支持同步和异步 API。 在下面的示例中,我们查询 JSONPlaceholder API 以获取用户数据,并使用 Pydantic 模型进行验证。

import httpx

from pydantic import BaseModel, EmailStr


class User(BaseModel):
    id: int
    name: str
    email: EmailStr


url = 'https://jsonplaceholder.typicode.com/users/1'

response = httpx.get(url)
response.raise_for_status()

user = User.model_validate(response.json())
print(repr(user))
#> User(id=1, name='Leanne Graham', email='Sincere@april.biz')

在处理 HTTP 请求时,Pydantic 的 TypeAdapter 工具通常非常方便。考虑一个类似的示例,我们要验证一个用户列表:

from pprint import pprint

import httpx

from pydantic import BaseModel, EmailStr, TypeAdapter


class User(BaseModel):
    id: int
    name: str
    email: EmailStr


url = 'https://jsonplaceholder.typicode.com/users/'  # (1)!

response = httpx.get(url)
response.raise_for_status()

users_list_adapter = TypeAdapter(list[User])

users = users_list_adapter.validate_python(response.json())
pprint([u.name for u in users])
"""
['Leanne Graham',
 'Ervin Howell',
 'Clementine Bauch',
 'Patricia Lebsack',
 'Chelsey Dietrich',
 'Mrs. Dennis Schulist',
 'Kurtis Weissnat',
 'Nicholas Runolfsdottir V',
 'Glenna Reichert',
 'Clementina DuBuque']
"""
  1. 请注意,我们正在查询 /users/ 端点以获取用户列表。