FastAPI 中如何定义 Pydantic 模型?

推荐答案

在 FastAPI 中,Pydantic 模型通常用于数据验证和序列化。你可以通过继承 pydantic.BaseModel 来定义一个 Pydantic 模型。以下是一个简单的示例:

在这个示例中,User 是一个 Pydantic 模型,它定义了四个字段:idnameemailis_activeis_active 字段有一个默认值 True

本题详细解读

1. Pydantic 模型的基本结构

Pydantic 模型是通过继承 pydantic.BaseModel 来定义的。每个字段都需要指定类型,并且可以包含默认值。例如:

在这个例子中,idnameemail 是必需的字段,而 is_active 是一个可选的字段,默认值为 True

2. 字段类型和验证

Pydantic 支持多种字段类型,包括基本类型(如 intstrbool)以及复杂类型(如 ListDictOptional 等)。Pydantic 会自动进行类型验证,如果输入的数据类型不匹配,会抛出 ValidationError

例如:

-- -------------------- ---- -------
---- ------ ------ ----- --------

----- ----------------
    --- ---
    ----- ---
    ------ ---
    ---------- ---- - ----
    -------- --------- - --
    -------- ------------- - ----

在这个例子中,friends 是一个整数列表,address 是一个可选的字符串字段。

3. 嵌套模型

Pydantic 模型可以嵌套使用,允许你定义复杂的数据结构。例如:

-- -------------------- ---- -------
----- -------------------
    ------- ---
    ----- ---
    ------ ---
    --------- ---

----- ----------------
    --- ---
    ----- ---
    ------ ---
    ---------- ---- - ----
    -------- -------

在这个例子中,User 模型包含一个嵌套的 Address 模型。

4. 使用 Pydantic 模型进行数据验证

在 FastAPI 中,Pydantic 模型通常用于请求体和响应体的数据验证。例如:

-- -------------------- ---- -------
---- ------- ------ -------
---- -------- ------ ---------

--- - ---------

----- ----------------
    --- ---
    ----- ---
    ------ ---
    ---------- ---- - ----

--------------------
----- --- ----------------- ------
    ------ ----

在这个例子中,create_user 路由接受一个 User 类型的请求体,FastAPI 会自动验证请求体的数据是否符合 User 模型的定义。

5. 自定义验证器

Pydantic 允许你定义自定义验证器来执行更复杂的验证逻辑。例如:

-- -------------------- ---- -------
---- -------- ------ ---------- ---------

----- ----------------
    --- ---
    ----- ---
    ------ ---
    ---------- ---- - ----

    -------------------
    --- -------------------------- ---
        -- --- --- -- --
            ----- ----------------- ---- ------- ---
        ------ -

在这个例子中,email_must_contain_at 是一个自定义验证器,用于确保 email 字段包含 @ 符号。

6. 序列化和反序列化

Pydantic 模型可以轻松地进行序列化和反序列化。你可以使用 model.dict() 将模型转换为字典,或者使用 model.json() 将模型转换为 JSON 字符串。例如:

输出结果为:

通过这些方法,你可以轻松地将 Pydantic 模型转换为适合存储或传输的格式。

纠错
反馈