- FastAPI 教程
- FastAPI - 首页
- FastAPI - 简介
- FastAPI - Hello World
- FastAPI - OpenAPI
- FastAPI - Uvicorn
- FastAPI - 类型提示
- FastAPI - IDE 支持
- FastAPI - REST 架构
- FastAPI - 路径参数
- FastAPI - 查询参数
- FastAPI - 参数验证
- FastAPI - Pydantic
- FastAPI - 请求体
- FastAPI - 模板
- FastAPI - 静态文件
- FastAPI - HTML 表单模板
- FastAPI - 访问表单数据
- FastAPI - 上传文件
- FastAPI - Cookie 参数
- FastAPI - 头部参数
- FastAPI - 响应模型
- FastAPI - 嵌套模型
- FastAPI - 依赖项
- FastAPI - CORS
- FastAPI - CRUD 操作
- FastAPI - SQL 数据库
- FastAPI - 使用 MongoDB
- FastAPI - 使用 GraphQL
- FastAPI - WebSockets
- FastAPI - FastAPI 事件处理器
- FastAPI - 挂载子应用
- FastAPI - 中间件
- FastAPI - 挂载 Flask 应用
- FastAPI - 部署
- FastAPI 有用资源
- FastAPI - 快速指南
- FastAPI - 有用资源
- FastAPI - 讨论
FastAPI - Pydantic
Pydantic 是一个用于数据解析和验证的 Python 库。它使用 Python 新版本(3.6 及以上版本)的类型提示机制,并在运行时验证类型。Pydantic 定义了BaseModel 类,作为创建用户自定义模型的基类。
以下代码定义了一个基于 BaseModel 的 Student 类模型。
from typing import List from pydantic import BaseModel class Student(BaseModel): id: int name :str subjects: List[str] = []
Student 类的属性用类型提示声明。请注意,subjects 属性是 typing 模块中定义的 List 类型,以及内置的列表类型。
我们可以使用具有匹配结构的字典来填充 Student 类的对象,如下所示:
>>> data = { 'id': 1, 'name': 'Ravikumar', 'subjects': ["Eng", "Maths", "Sci"], } >>> s1=Student(**data) >>> print (s1) id=1 name='Ravikumar' subjects=['Eng', 'Maths', 'Sci'] >>> s1 Student(id=1, name='Ravikumar', subjects=['Eng', 'Maths', 'Sci']) >>> s1.dict() {'id': 1, 'name': 'Ravikumar', 'subjects': ['Eng', 'Maths', 'Sci']}
Pydantic 会尽可能自动进行数据类型转换。例如,即使字典中的 id 键被赋予数字的字符串表示(例如 '123'),它也会将其强制转换为整数。但如果无法转换,则会引发异常。
>>> data = { 'id': [1,2], 'name': 'Ravikumar', 'subjects': ["Eng", "Maths", "Sci"], } >>> s1=Student(**data) Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> s1=Student(**data) File "pydantic\main.py", line 406, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: 1 validation error for Student id value is not a valid integer (type=type_error.integer)
Pydantic 还包含一个 Field 类,用于声明模型属性的元数据和验证规则。首先修改 Student 类,在 "name" 属性上应用 Field 类型,如下所示:
from typing import List from pydantic import BaseModel, Field class Student(BaseModel): id: int name :str = Field(None, title="The description of the item", max_length=10) subjects: List[str] = []
按如下所示填充数据。这里的 name 超过了规定的max_length。Pydantic 按预期抛出ValidationError。
>>> data = { 'id': 1, 'name': 'Ravikumar Sharma', 'subjects': ["Eng", "Maths", "Sci"], } >>> s1=Student(**data) Traceback (most recent call last): File "<pyshell#28>", line 1, in <module> s1=Student(**data) File "pydantic\main.py", line 406, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: 1 validation error for Student name ensure this value has at most 10 characters (type=value_error.any_str.max_length; limit_value=10)
Pydantic 模型可以与 ORM 模型(如SQLAlchemy 或Peewee)映射。
广告