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='[email protected]')
当处理 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']
"""
- 请注意,我们在此处查询
/users/
端点以获取用户列表。