FastAPI 教程

3.2 模型定义与字段类型

FastAPI 入门教程:Python 初学者快速上手指南,轻松学会模型定义与字段类型

FastAPI 教程

这是一个面向Python初学者的FastAPI入门教程,详细讲解如何使用Pydantic定义模型和字段类型,通过生活化类比和简单示例快速上手,帮助您建立Web开发信心。

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

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

了解更多

FastAPI 入门教程:Python 初学者的轻松之旅

简介:为什么学习 FastAPI?

想象一下,您想在咖啡店里点一杯咖啡。咖啡店的菜单(API 端点)告诉您有哪些饮料(数据)可用,而您填写的订单表单(模型)确保您点的是正确的咖啡类型和大小。FastAPI 就像一个超级高效的咖啡店系统,让您轻松创建和管理这些菜单和表单!

FastAPI 是一个现代、快速的 Web 框架,用 Python 编写,用于构建 API。即使您没有 Web 开发经验,也能快速入门。本教程将带您一步步动手实践,避免过多理论,让您在每个阶段都体验到“成功时刻”!


第一步:安装 FastAPI

在开始之前,您需要安装 FastAPI 和一个 ASGI 服务器(如 Uvicorn),来运行您的应用。打开终端或命令行,输入以下命令:

pip install fastapi uvicorn

安装完成后,您就可以开始编写代码了!


第二步:创建您的第一个 FastAPI 应用

让我们从一个最简单的例子开始,就像第一次学习加法一样——既简单又有成就感!

创建一个新文件,命名为 main.py,并输入以下代码:

from fastapi import FastAPI

app = FastAPI()  # 创建一个 FastAPI 应用实例,就像是开设一家新咖啡店

@app.get("/")  # 定义一个 GET 端点,就像在咖啡店菜单上添加一个“欢迎光临”选项
def read_root():
    return {"message": "欢迎使用 FastAPI!您的第一个 API 已成功运行!"}

现在,在终端运行这个应用:

uvicorn main:app --reload

访问 http://127.0.0.1:8000 在浏览器中,您会看到 JSON 响应 {"message": "欢迎使用 FastAPI!您的第一个 API 已成功运行!"}。恭喜!您已经创建了第一个 API——这就是您的“成功时刻”!


第三步:理解模型定义与字段类型

在 FastAPI 中,我们使用 Pydantic 来定义模型。模型就像是咖啡店的订单表单,确保客户点的是有效的咖啡(例如,不能点“巧克力味的披萨”)。字段类型指定了表单中每个部分应该是什么类型的数据(例如,名字是文本,年龄是数字)。

生活化类比

  • 模型(Model):想象成您填写的外卖订单单子。单子有固定的格式,比如必须填写姓名、电话号码、订单项。如果您填写了无效的信息(比如把电话号码写成了字母),系统会提示您错误。

  • 字段类型(Field Types):订单单子上的每个字段都有特定类型。例如,姓名字段是字符串(str),电话号码是整数或字符串(int 或 str),订单数量是整数(int)。这确保了数据的一致性。

动手实践:定义一个简单模型

main.py 中,添加以下代码来定义一个用户模型:

from pydantic import BaseModel  # 导入 BaseModel 来创建模型

class User(BaseModel):  # 定义一个用户模型,就像设计订单单子
    name: str  # 名字字段,必须是字符串——就像订单上的姓名必须是文本
    age: int   # 年龄字段,必须是整数——就像订单数量必须是数字
    email: str  # 邮箱字段,必须是字符串,但稍后我们可以添加更复杂的验证

现在,让我们使用这个模型来创建一个 POST 端点,接收用户数据:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

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

@app.post("/users/")
def create_user(user: User):  # FastAPI 会自动验证输入数据是否符合 User 模型
    # 这里我们只是返回接收到的数据,让您看到验证成功
    return {"message": "用户创建成功!", "user": user}

运行应用(如果已经在运行,保存文件后会自动重载),然后使用一个工具如 curl 或浏览器扩展(如 Postman)来测试。例如,用 curl 发送一个 POST 请求:

curl -X POST "http://127.0.0.1:8000/users/" -H "Content-Type: application/json" -d '{"name": "小明", "age": 25, "email": "xiaoming@example.com"}'

您应该会收到响应:{"message": "用户创建成功!", "user": {"name": "小明", "age": 25, "email": "xiaoming@example.com"}}。如果输入错误,比如 age 写为字符串,FastAPI 会自动返回错误——这就是模型的强大之处!

更多字段类型示例

Pydantic 支持多种字段类型,让您的模型更强大。让我们扩展 User 模型:

from pydantic import BaseModel, EmailStr  # 导入 EmailStr 用于邮箱验证
from typing import Optional  # 导入 Optional 用于可选字段

class EnhancedUser(BaseModel):
    name: str  # 必须的字符串字段
    age: int   # 必须的整数字段
    email: EmailStr  # 邮箱字段,Pydantic 会自动验证邮箱格式
    phone: Optional[str] = None  # 可选字段,如果未提供则为 None,就像订单上的备注是可选的
    is_active: bool = True  # 布尔字段,默认值为 True,就像默认订单状态是有效的

现在,创建一个新的端点来测试这个模型:

@app.post("/enhanced-users/")
def create_enhanced_user(user: EnhancedUser):
    return {"message": "增强用户创建成功!", "user": user}

测试时,尝试发送不同数据,看看验证如何工作。例如,发送无效邮箱会返回错误——这又让您体验了一个“成功时刻”,因为系统帮您捕获了问题!


第四步:更多“成功时刻”示例

为了巩固信心,让我们快速添加几个简单示例:

示例1:获取所有用户(模拟数据)

users_db = []  # 一个简单的内存列表来存储用户数据

@app.get("/users/")
def read_users():
    return {"users": users_db}

@app.post("/users/")
def create_user(user: User):
    users_db.append(user)  # 将新用户添加到列表
    return {"message": "用户已添加!", "user": user}

现在,您可以先通过 POST 添加用户,然后通过 GET 查看所有用户——就像是咖啡店记录订单!

示例2:更新用户信息

from fastapi import HTTPException

@app.put("/users/{user_id}")  # {user_id} 是路径参数,就像指定订单号
def update_user(user_id: int, updated_user: User):
    if user_id >= len(users_db):
        raise HTTPException(status_code=404, detail="用户未找到")
    users_db[user_id] = updated_user
    return {"message": f"用户 ID {user_id} 更新成功!", "user": updated_user}

测试时,使用 PUT 请求更新特定用户。这展示了 FastAPI 如何处理路径参数和模型验证。


总结和下一步

恭喜您完成了 FastAPI 的入门之旅!您已经学会了:

  • 安装 FastAPI 并运行一个简单应用。
  • 使用 Pydantic 定义模型和字段类型,确保数据有效性。
  • 创建多个 API 端点,体验了 GET、POST、PUT 操作。

通过生活化类比和动手实践,您应该对 FastAPI 有了基本信心。记住,就像学做咖啡一样,多加练习会让您更熟练!

下一步建议:

  • 探索 FastAPI 官方文档(有交互式示例)。
  • 尝试添加删除功能(DELETE 端点)。
  • 学习如何集成数据库,如 SQLite 或 PostgreSQL。

继续编码,享受创造的乐趣!

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

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

获取工具包