FastAPI 教程

2.4 请求体:POST、PUT、PATCH 请求

FastAPI教程:Python初学者快速掌握POST、PUT、PATCH请求

FastAPI 教程

面向Python初学者的FastAPI入门教程,用生活化类比解释POST、PUT、PATCH请求,通过详细示例和动手实践,快速上手Web开发,建立信心。

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

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

了解更多

FastAPI入门教程:轻松学会POST、PUT、PATCH请求

欢迎来到FastAPI的世界!如果你已经掌握了Python的基础语法,但对Web开发感到陌生,别担心。本教程将用简单易懂的方式,带你快速学会如何使用POST、PUT和PATCH请求来处理数据。我们会避免枯燥的理论,专注于动手实践,让你在每个小步骤中都能体验到“成功时刻”!

什么是POST、PUT和PATCH请求?

在Web开发中,HTTP请求就像我们与服务器沟通的方式。想象一下,你有一个在线笔记应用:

  • POST请求:就像在笔记本里添加一条新笔记。你提供新内容,服务器接收并保存它。
  • PUT请求:就像更新整条笔记。你发送完整的新内容,服务器用它替换旧内容。
  • PATCH请求:就像只修改笔记中的一部分,比如改正一个错别字。你只发送需要更新的部分,服务器只改变那部分。

简单来说,POST用于创建新东西,PUT用于全盘更新,PATCH用于局部更新。是不是很像生活中的例子?

环境准备:安装FastAPI

首先,确保你已经安装了Python(建议3.7以上版本)。然后,打开终端或命令行,输入以下命令来安装FastAPI和运行服务器所需的工具:

pip install fastapi uvicorn

这个命令会下载FastAPI库和Uvicorn服务器——就像给你的代码装上一个强大的引擎,让它能响应网络请求。安装完成后,你会看到一些输出,确认安装成功!

快速上手:创建你的第一个API

现在,让我们动手写代码!创建一个新文件,比如叫app.py,然后复制粘贴下面的代码:

# 导入FastAPI模块
from fastapi import FastAPI

# 创建一个FastAPI应用实例
app = FastAPI()

# 定义一个简单的GET请求示例,先热热身
@app.get("/")  # "@"装饰器表示这是一个路由处理函数
async def home():
    return {"message": "欢迎使用FastAPI!试试下面的POST、PUT和PATCH请求吧!"}

保存文件后,在终端运行服务器:

uvicorn app:app --reload

打开浏览器,访问http://127.0.0.1:8000,你会看到{"message": "欢迎使用FastAPI!..."}的JSON响应——恭喜,你的第一个API运行成功了!这是你的第一个“成功时刻”,证明一切设置正确。

动手实践:POST、PUT和PATCH请求

1. POST请求:创建新用户

假设我们正在构建一个用户管理系统。POST请求就像注册一个新用户。在app.py中添加以下代码:

from fastapi import FastAPI
from pydantic import BaseModel  # 导入Pydantic用于数据验证

app = FastAPI()

# 定义一个用户模型,就像一张表格
class User(BaseModel):
    name: str
    email: str

# 模拟一个简单的数据库(用列表存储)
users = []

@app.post("/users/")
async def create_user(user: User):
    users.append(user.dict())  # 将用户数据保存到列表
    return {"success": True, "user": user.dict(), "message": "用户创建成功!"}

保存文件后,服务器会自动重启(因为用了--reload)。现在,测试一下:

  • 打开浏览器,访问http://127.0.0.1:8000/docs,这是FastAPI自动生成的交互式文档。
  • 在文档页面,找到/users/端点,点击“Try it out”。
  • 在请求体中输入JSON数据,例如:{"name": "小明", "email": "xiaoming@example.com"}
  • 点击“Execute”,你会看到响应{"success": true, "user": {...}, "message": "用户创建成功!"}——太棒了!你刚刚用POST请求创建了一个虚拟用户。

2. PUT请求:更新整个用户信息

PUT请求就像更新用户的完整资料。继续在app.py中添加:

@app.put("/users/{user_id}")  # {user_id}是一个路径参数,指定要更新哪个用户
async def update_user(user_id: int, user: User):
    if user_id < 0 or user_id >= len(users):
        return {"error": "用户不存在"}
    users[user_id] = user.dict()  # 用新数据替换旧数据
    return {"success": True, "updated_user": users[user_id], "message": "用户信息已全部更新!"}

测试一下:

  • 首先,确保已经通过POST创建了至少一个用户(检查users列表的长度)。你可以多次使用POST端点添加用户。
  • 在文档页面,找到/users/{user_id}端点(PUT方法),点击“Try it out”。
  • 输入user_id(例如0表示第一个用户),并在请求体中输入新数据,如{"name": "李华", "email": "lihua@example.com"}
  • 点击“Execute”,如果用户存在,你会看到成功更新的响应——这就像你把小明的资料全改成了李华,一次搞定!

3. PATCH请求:部分更新用户信息

PATCH请求更灵活,只更新部分字段。这需要使用一个可选模型。添加以下代码:

from typing import Optional  # 导入Optional表示字段可选

class UserUpdate(BaseModel):
    name: Optional[str] = None  # 名称可选
    email: Optional[str] = None  # 邮箱可选

@app.patch("/users/{user_id}")
async def partial_update_user(user_id: int, user_update: UserUpdate):
    if user_id < 0 or user_id >= len(users):
        return {"error": "用户不存在"}
    current_user = users[user_id]
    # 只更新提供的字段
    if user_update.name is not None:
        current_user["name"] = user_update.name
    if user_update.email is not None:
        current_user["email"] = user_update.email
    users[user_id] = current_user
    return {"success": True, "patched_user": users[user_id], "message": "用户信息已部分更新!"}

测试一下:

  • 在文档页面,找到/users/{user_id}端点(PATCH方法)。
  • 输入user_id(例如0),在请求体中可以只发送一个字段,比如{"email": "newemail@example.com"}
  • 点击“Execute”,你会看到只有邮箱被更新,而名称保持不变——就像你只修改了电话号码,其他信息不动。完美!

总结与鼓励

恭喜你!通过本教程,你已经学会了:

  1. 基本概念:用生活化类比理解了POST(创建)、PUT(全更新)和PATCH(部分更新)请求。
  2. 动手实践:设置了FastAPI环境,并成功运行了所有示例。
  3. 成功时刻:每个示例都能在浏览器中测试并获得响应,证明你的代码有效!

回顾一下:POST就像发新微博,PUT像重写整篇文章,PATCH像只改一个错别字。通过FastAPI,这一切变得非常简单——你只需定义模型和路由,剩下的交给框架处理。

如果你在过程中遇到问题,检查代码是否复制正确,或者回看文档。Web开发并不神秘,多动手试试就能掌握。继续探索FastAPI的其他功能吧,比如添加认证或连接真实数据库。你已经迈出了第一步,保持信心,享受编码的乐趣!

小提示:在实际项目中,通常会使用数据库来持久化数据,但本教程用列表模拟,是为了让你专注于核心概念。当你准备好了,可以学习集成SQLite或PostgreSQL等数据库。

Happy coding!🚀

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

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

获取工具包