前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI基础-数据模型

FastAPI基础-数据模型

原创
作者头像
堕落飞鸟
发布2023-05-07 20:54:18
7450
发布2023-05-07 20:54:18
举报
文章被收录于专栏:飞鸟的专栏

定义数据模型

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义数据模型
  • 数据模型继承
  • 数据模型验证
  • 数据模型文档
  • 数据模型序列化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档