2.1 路由定义与 HTTP 方法装饰器
FastAPI 路由定义与 HTTP 方法装饰器入门教程 - 适合Python初学者
本教程通过简单示例和生活化类比,详细讲解FastAPI中的路由定义和HTTP方法装饰器使用,帮助有Python基础的Web开发新手快速上手,掌握基础概念并体验成功时刻。
路由定义与 HTTP 方法装饰器:Python 初学者的 FastAPI 入门指南
欢迎来到 FastAPI 的入门教程!如果你懂一点 Python 语法,但对 Web 开发还不太熟悉,别担心,这篇教程就是为你设计的。我们将用轻松的方式,通过动手实践来学习 FastAPI 的核心部分:路由定义和 HTTP 方法装饰器。目标是让你快速建立信心,避免枯燥理论,每一步都有简单的成功示例。
引言:用生活化类比理解路由和 HTTP 方法
想象一下你是一家快递公司:
- 路由就像快递地址:它告诉快递员(服务器)去哪里送信(处理请求)。
- HTTP 方法就像送信的方式:比如,GET 是查看快递单号(获取信息),POST 是寄送新包裹(发送新数据)。 在 FastAPI 中,路由定义和 HTTP 方法装饰器就是帮你设置这些地址和方式,让服务器知道如何响应不同的请求。
基础概念:快速了解关键术语
- 路由(Route):指定一个 URL 路径,比如
/表示主页,/items/表示物品列表。 - 端点(Endpoint):路由和 HTTP 方法的组合,例如
GET /就是一个端点。 - HTTP 方法(HTTP Methods):常见的有 GET、POST、PUT、DELETE,用于定义操作类型。
- 装饰器(Decorator):在 Python 中,装饰器是一种语法糖,用
@符号开头,用来修改函数的行为。在 FastAPI 中,装饰器用来标记函数处理特定路由和 HTTP 方法。
别担心理论,我们马上动手试试!
动手实践:从零开始创建你的第一个 FastAPI 路由
步骤 1:环境准备
假设你已经安装了 Python(建议版本 3.7+),打开终端或命令行工具,运行以下命令安装 FastAPI 和一个简单的服务器:
pip install fastapi uvicorn
这就像给快递公司配备车辆和司机,准备好送货!
步骤 2:创建第一个路由——根路由 GET /
创建一个新文件,命名为 main.py,然后输入以下代码:
from fastapi import FastAPI # 导入 FastAPI 框架
app = FastAPI() # 创建一个 FastAPI 应用实例,就像开张一家快递公司
@app.get("/") # 使用装饰器定义路由:处理 GET 请求到根路径 "/"
def read_root():
return {"message": "Hello, World!"} # 当访问主页时,返回一个 JSON 消息
成功时刻:你刚刚定义了第一个路由!这相当于设置了一个快递地址,当有人访问网站主页时,服务器会返回“Hello, World!”。
步骤 3:运行服务器并测试
在终端中,进入 main.py 文件所在的目录,运行:
uvicorn main:app --reload
解释:
main:app指定应用(main.py 文件中的 app 实例)。--reload使服务器在代码更改时自动重启,方便调试。 打开浏览器,访问http://127.0.0.1:8000/,你应该看到{"message": "Hello, World!"}显示在页面上。恭喜!你的第一个 Web 应用运行起来了!
扩展示例:添加更多路由和 HTTP 方法
现在,让我们添加其他路由,就像快递公司扩展业务,处理不同类型的包裹。
示例 1:添加一个 POST 路由——处理新数据
修改 main.py,添加以下代码:
@app.post("/items/") # 使用 @app.post 装饰器,定义处理 POST 请求到 "/items/"
def create_item(item: dict): # 函数接收一个参数 item(假设是字典类型)
# 在实际应用中,这里可以处理数据,比如保存到数据库
return {"received_item": item} # 返回收到的数据,确认成功
成功时刻:你现在有了两个端点!用类比来说,GET 是查看已有快递单(主页),POST 是寄送新包裹(提交新物品)。
示例 2:添加更多 HTTP 方法——丰富你的快递业务
继续扩展 main.py:
@app.get("/items/{item_id}") # 定义 GET 请求,带路径参数 item_id
def read_item(item_id: int): # item_id 是整数类型的路径参数
return {"item_id": item_id, "message": "查看指定物品"} # 根据 ID 返回信息
@app.put("/items/{item_id}") # 定义 PUT 请求,用于更新数据
def update_item(item_id: int, item: dict):
return {"item_id": item_id, "updated_item": item} # 假设更新成功
@app.delete("/items/{item_id}") # 定义 DELETE 请求,用于删除数据
def delete_item(item_id: int):
return {"item_id": item_id, "message": "物品已删除"} # 假设删除成功
解释:
{item_id}是路径参数,在 URL 中动态变化,比如访问/items/1会匹配 item_id=1。- 用类比:GET 是查看某个快递单号,PUT 是修改包裹信息,DELETE 是取消寄送。
测试你的应用
重启服务器(如果使用 --reload,它会自动更新),然后可以用工具测试,比如:
- 浏览器访问
http://127.0.0.1:8000/items/1测试 GET 请求。 - 使用 Postman 或 curl 发送 POST 请求到
http://127.0.0.1:8000/items/并附带 JSON 数据(例如{"name": "book"})。 你会看到服务器正确响应,体验更多的成功时刻!
生活化类比加深理解
- 路由:就像你家的门牌号(如
/home),快递员(请求)知道该送到哪里。 - 装饰器:就像给包裹贴上标签(
@app.get标签表示这个是取件单)。 - HTTP 方法:快递操作——GET(取件查看)、POST(寄送新件)、PUT(修改信息)、DELETE(取消寄送)。 通过类比,Web 开发变得直观起来!
总结与下一步
你已经学会了如何使用 FastAPI 定义路由和处理基本的 HTTP 方法。关键点:
- 使用
@app.get("/")、@app.post("/items/")等装饰器来定义端点。 - 每个装饰器对应一个函数,处理特定请求。
- 通过简单示例快速上手,建立了初始信心。
鼓励你:尝试修改代码,添加自己的路由和函数,比如创建一个 /about 路由返回关于页面的信息。继续探索 FastAPI 的更多功能,如路径参数、查询参数和自动文档生成。
记住,就像开快递公司一样,从简单的送货开始,慢慢扩展业务。祝你学习愉快!