FastAPI 教程

3.5 嵌套模型与列表字段

FastAPI入门教程:嵌套模型与列表字段详解

FastAPI 教程

本教程面向有Python基础的初学者,通过简单示例和类比,详细讲解FastAPI中嵌套模型和列表字段的概念和用法,帮助您快速上手Web开发并建立信心。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

FastAPI入门教程:嵌套模型与列表字段

欢迎来到FastAPI世界!

想象一下,FastAPI就像是建造一个智能邮局,它帮你快速、准确地收发数据包裹。今天,我们将学习如何用Python的FastAPI框架处理复杂数据,比如嵌套模型(就像包裹里有小包裹)和列表字段(就像一篮子多个物品)。

第一步:安装和快速启动

首先,确保您有Python基础,然后安装FastAPI。打开命令行,输入:

pip install fastapi uvicorn

创建一个新文件 main.py,添加以下代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

运行这个应用:

uvicorn main:app --reload

在浏览器中打开 http://127.0.0.1:8000,您会看到 {"Hello": "World"} 显示出来!

成功时刻:您的第一个FastAPI端点已经运行起来了!这是一个简单的开始,但我们已经迈出了重要一步。

第二步:引入数据模型——Pydantic

在FastAPI中,我们使用Pydantic来定义数据模型,就像创建一个表格来填写信息。假设我们要创建一个用户模型。

from pydantic import BaseModel

class User(BaseModel):
    name: str  # 名字是字符串
    age: int   # 年龄是整数

生活化类比:这就像填写一个用户注册表,有姓名和年龄两个必填项。

现在,让我们创建一个端点来处理用户数据。在 main.py 中添加:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    name: str
    age: int

@app.post("/users/")
def create_user(user: User):
    return {"user": user}

重启应用(uvicorn会自动重新加载),然后用工具如Postman或curl发送POST请求到 http://127.0.0.1:8000/users/,请求体为:

{
  "name": "Alice",
  "age": 30
}

您会看到服务器返回 {"user": {"name": "Alice", "age": 30}}

成功时刻:您已经成功地用模型验证和接收了数据!FastAPI自动检查输入是否符合模型要求,就像邮局检查包裹是否合规。

第三步:嵌套模型——包裹里有小包裹

有时候,数据更复杂,比如一个博客帖子包含作者信息。这就像一个大包裹里装了一个小包裹(作者详情)。

定义模型:

class Author(BaseModel):
    name: str
    email: str

class Post(BaseModel):
    title: str
    content: str
    author: Author  # 这里嵌套了Author模型

main.py 中添加端点:

@app.post("/posts/")
def create_post(post: Post):
    return {"post": post}

发送POST请求到 http://127.0.0.1:8000/posts/,请求体为:

{
  "title": "My First Post",
  "content": "Hello FastAPI!",
  "author": {
    "name": "Bob",
    "email": "bob@example.com"
  }
}

返回的结果会是完整的嵌套数据。

生活化类比:这就像订单里不仅有产品,还有送货地址——地址是一个独立的信息块,嵌套在订单中。

第四步:列表字段——一篮子多个物品

现在,假设一个订单包含多个产品,每个产品有自己的信息。我们可以用列表字段来处理。

定义模型:

from typing import List  # 为了兼容性,Python 3.9+可以直接用list[Product]

class Product(BaseModel):
    name: str
    price: float

class Order(BaseModel):
    customer: User  # 嵌套模型
    products: List[Product]  # 列表字段,表示多个产品

添加端点:

@app.post("/orders/")
def create_order(order: Order):
    return {"order": order}

发送POST请求到 http://127.0.0.1:8000/orders/,请求体为:

{
  "customer": {
    "name": "Charlie",
    "age": 25
  },
  "products": [
    {"name": "Apple", "price": 1.0},
    {"name": "Banana", "price": 0.5}
  ]
}

您会看到服务器处理了嵌套的客户信息和产品列表。

成功时刻:您已经处理了复杂的嵌套和列表数据!这就像是成功邮寄了一个装满不同物品的包裹。

第五步:完整示例——整合所有内容

让我们把上面的代码整合到一个文件中,运行一个完整的应用。

main.py 完整代码:

from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

class User(BaseModel):
    name: str
    age: int

class Author(BaseModel):
    name: str
    email: str

class Post(BaseModel):
    title: str
    content: str
    author: Author

class Product(BaseModel):
    name: str
    price: float

class Order(BaseModel):
    customer: User
    products: List[Product]

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.post("/users/")
def create_user(user: User):
    return {"user": user}

@app.post("/posts/")
def create_post(post: Post):
    return {"post": post}

@app.post("/orders/")
def create_order(order: Order):
    return {"order": order}

运行应用,用不同的端点测试,您会看到所有功能都正常工作。

总结和下一步

通过这个教程,您已经学会了:

  • 如何用FastAPI创建简单的API端点。
  • 使用Pydantic模型定义数据结构。
  • 处理嵌套模型(如帖子包含作者)。
  • 处理列表字段(如订单包含多个产品)。

生活化类比总结:FastAPI就像您的数据邮局,模型是邮寄规则,嵌套是包裹套包裹,列表是一箱多物。

继续探索FastAPI文档(https://fastapi.tiangolo.com/),尝试添加更多功能,如查询参数或错误处理。保持动手实践,您会很快成为Web开发高手!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包