FastAPI基础-数据模型

2023-05-07 20:54:18 浏览数 (3)

定义数据模型

在FastAPI中,我们可以使用Python的标准类型注释来定义数据模型。例如,以下是一个描述用户信息的数据模型:

代码语言:javascript复制
from typing import List

class User(BaseModel):
    id: int
    name: str
    email: str
    password: str
    friends: List[int] = []

在上面的代码中,我们使用Python的标准类型注释定义了一个名为User的数据模型。该模型具有五个字段,分别是idnameemailpasswordfriends。前四个字段都是必需的,并具有intstrList[int]类型。最后一个字段friends是可选的,并具有一个默认值[],它表示用户的好友ID列表。

数据模型继承

在FastAPI中,我们可以使用数据模型继承来重用字段和方法。例如,以下是一个基于User模型的管理员模型:

代码语言:javascript复制
class Admin(User):
    role: str

在上面的代码中,我们定义了一个名为Admin的数据模型,它继承自User模型,并添加了一个名为role的字段。因此,Admin模型具有User模型的所有字段和方法,以及一个额外的role字段。

数据模型验证

在FastAPI中,数据模型可以自动验证输入数据的结构和类型,并返回有用的错误消息。例如,以下是一个使用User模型的路由函数:

代码语言:javascript复制
@app.post("/users")
async def create_user(user: User):
    """
    Creates a new user.
    """
    # ...

在上面的代码中,我们定义了一个名为create_user的路由函数,它接受一个名为userUser模型对象作为参数。如果请求体中的数据与User模型不兼容,FastAPI将自动返回400 Bad Request响应,并提供有用的错误消息。

数据模型文档

在FastAPI中,我们可以使用数据模型来自动生成文档。FastAPI将自动从数据模型中提取字段名、类型和默认值,并将其包含在生成的文档中。例如,以下是一个使用User模型的路由函数,并生成自动文档:

代码语言:javascript复制
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模型对象的路由函数:

代码语言:javascript复制
@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格式,并在响应中返回。这使得序列化输出数据变得非常简单和方便。

0 人点赞