定义数据模型
在FastAPI中,我们可以使用Python的标准类型注释来定义数据模型。例如,以下是一个描述用户信息的数据模型:
代码语言:javascript复制from typing import List
class User(BaseModel):
id: int
name: str
email: str
password: str
friends: List[int] = []
在上面的代码中,我们使用Python的标准类型注释定义了一个名为User
的数据模型。该模型具有五个字段,分别是id
、name
、email
、password
和friends
。前四个字段都是必需的,并具有int
、str
和List[int]
类型。最后一个字段friends
是可选的,并具有一个默认值[]
,它表示用户的好友ID列表。
数据模型继承
在FastAPI中,我们可以使用数据模型继承来重用字段和方法。例如,以下是一个基于User
模型的管理员模型:
class Admin(User):
role: str
在上面的代码中,我们定义了一个名为Admin
的数据模型,它继承自User
模型,并添加了一个名为role
的字段。因此,Admin
模型具有User
模型的所有字段和方法,以及一个额外的role
字段。
数据模型验证
在FastAPI中,数据模型可以自动验证输入数据的结构和类型,并返回有用的错误消息。例如,以下是一个使用User
模型的路由函数:
@app.post("/users")
async def create_user(user: User):
"""
Creates a new user.
"""
# ...
在上面的代码中,我们定义了一个名为create_user
的路由函数,它接受一个名为user
的User
模型对象作为参数。如果请求体中的数据与User
模型不兼容,FastAPI将自动返回400 Bad Request响应,并提供有用的错误消息。
数据模型文档
在FastAPI中,我们可以使用数据模型来自动生成文档。FastAPI将自动从数据模型中提取字段名、类型和默认值,并将其包含在生成的文档中。例如,以下是一个使用User
模型的路由函数,并生成自动文档:
app.post("/users")
async def create_user(user: User):
"""
Creates a new user.
- **user**: The information of the user to create.
"""
# ...
在上面的代码中,我们在create_user
函数上方的docstring中包含了一个描述user
参数的注释。这将使FastAPI生成一个包含User
模型字段的表单在自动生成的文档中。这使得文档的编写过程更加简单,并确保了文档的一致性。
数据模型序列化
在FastAPI中,我们可以使用数据模型来自动序列化输出数据。当我们返回一个数据模型对象时,FastAPI将自动将其转换为JSON格式,并在响应中返回。例如,以下是一个返回User
模型对象的路由函数:
@app.get("/users/{user_id}")
async def get_user(user_id: int):
"""
Returns the information of a user.
- **user_id**: The ID of the user to return.
"""
user = get_user_by_id(user_id)
return user
在上面的代码中,我们定义了一个名为get_user
的路由函数,它接受一个名为user_id
的参数,并返回一个User
模型对象。当我们返回user
对象时,FastAPI将自动将其转换为JSON格式,并在响应中返回。这使得序列化输出数据变得非常简单和方便。