14.7 异步任务性能优化
FastAPI入门教程:Python初学者快速上手Web开发
本教程面向Python初学者,通过生活化类比和简单示例,详细讲解FastAPI基础,快速上手Web开发,无需前置经验。
FastAPI入门教程:面向Python初学者
介绍
FastAPI是一个现代的、快速的(fast)Web框架,专门用于构建API(应用程序编程接口)。如果你刚学会Python基础语法,想尝试Web开发,FastAPI是你的完美选择,因为它设计简洁、运行快速,而且学习曲线平缓。
生活化类比:想象你是一家餐厅的服务员。顾客(客户端)来点菜(发送请求),你处理订单(处理请求),然后上菜(返回响应)。FastAPI就是那个高效、友好的服务员,帮你轻松处理各种请求,让顾客满意!
快速上手:从零开始运行你的第一个API
步骤1:安装FastAPI和服务器
在终端或命令行中,运行以下命令来安装FastAPI和一个服务器(Uvicorn):
pip install fastapi uvicorn
解释:FastAPI是框架本身,Uvicorn是用于运行FastAPI应用的服务器。这就好比买了一把好刀(FastAPI)和一个厨房(Uvicorn),准备做菜!
步骤2:创建第一个API文件
创建一个新文件,比如命名为 main.py,并用文本编辑器打开它。然后,复制粘贴以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
成功时刻:看,你刚刚定义了一个API端点!这段代码创建了一个应用(app),并指定当有人访问根路径(/)时,返回一个简单的JSON响应 {"Hello": "World"}。这就像设置了餐厅的欢迎标语,客人一来就能看到。
步骤3:运行你的API
在终端中,导航到 main.py 所在的目录,运行以下命令:
uvicorn main:app --reload
main:app指的是main.py文件中的app对象。--reload参数让服务器在代码更改时自动重启,非常方便调试。
运行后,你会看到类似这样的输出,表示服务器已启动:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
成功时刻:现在,打开你的浏览器,访问 http://127.0.0.1:8000。你会立刻看到 {"Hello": "World"} 显示在页面上!恭喜,你的第一个API已经成功运行了!这就像开张第一天就有顾客上门,感觉棒极了。
添加更多功能:让API变得更实用
路径参数:根据ID获取特定内容
路径参数让你能处理动态URL,比如根据菜单ID获取菜单详情。
在 main.py 中添加以下代码:
@app.get("/menu/{menu_id}")
def read_menu(menu_id: int):
return {"menu_id": menu_id, "name": "Special Pizza"}
生活化类比:菜单ID就像是餐厅菜单的编号,每个编号对应一个特定的菜单项。FastAPI自动提取URL中的数字,并把它作为 menu_id 参数传递给你的函数。
测试:保存文件后(服务器会自动重启),在浏览器访问 http://127.0.0.1:8000/menu/1,你会看到 {"menu_id": 1, "name": "Special Pizza"}。试试改成其他数字,比如 http://127.0.0.1:8000/menu/42,FastAPI会智能地处理它!
查询参数:添加可选的自定义选项
查询参数用于在URL中传递额外信息,比如分页或过滤选项。
在 main.py 中添加:
@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
解释:skip 和 limit 是查询参数,有默认值。用户可以在URL中添加 ?skip=2&limit=5 来覆盖默认值。
测试:访问 http://127.0.0.1:8000/items/,你会看到 {"skip": 0, "limit": 10}。然后尝试 http://127.0.0.1:8000/items/?skip=2&limit=5,响应变成 {"skip": 2, "limit": 5}。这就像顾客点菜时说:“我要跳过前两个,只要后五个菜”,FastAPI轻松理解!
POST请求和请求体:接收和发送数据
POST请求常用于创建新资源,比如提交一个订单。
首先,导入 pydantic 来定义数据模型(这有助于自动验证数据):
from pydantic import BaseModel
class Order(BaseModel):
item_name: str
quantity: int
然后,添加POST端点:
@app.post("/orders/")
def create_order(order: Order):
return {"order_received": order.item_name, "quantity": order.quantity}
生活化类比:Order 模型定义了订单的结构,就像餐厅的点菜单,需要填写菜名和数量。POST请求就像顾客递上填写好的点菜单,FastAPI会检查菜单是否填写正确(数据验证),然后处理。
测试:由于浏览器通常只支持GET请求,你可以使用简单工具如 Postman 或命令行工具 curl。例如,用 curl 发送POST请求:
curl -X POST "http://127.0.0.1:8000/orders/" -H "Content-Type: application/json" -d '{"item_name":"Pizza","quantity":2}'
你会收到响应:{"order_received":"Pizza","quantity":2}。如果发送无效数据(如缺少字段),FastAPI会自动返回错误信息,帮你调试!
额外成功时刻:自动交互式文档
FastAPI自带自动生成的文档,让你无需额外工具就能测试API。
在浏览器访问 http://127.0.0.1:8000/docs,你会看到一个漂亮的交互式界面(基于Swagger UI)。这里列出了你所有的API端点,你可以直接点击尝试发送请求,看到实时响应!这就像餐厅有了智能点菜系统,顾客可以自己浏览和下单。
总结和下一步建议
通过这个教程,你已经学会了FastAPI的核心基础:
- 安装和运行FastAPI应用。
- 创建简单的GET和POST端点。
- 使用路径参数和查询参数处理动态请求。
- 利用Pydantic模型验证请求数据。
建立信心:每个步骤都有即时反馈,让你感受到“哇,我做到了!”的成功时刻。FastAPI的设计让Web开发变得直观有趣。
建议练习:为了巩固知识,尝试创建一个简单的待办事项API:
- GET
/todos/返回所有待办事项列表。 - POST
/todos/添加新待办事项。 - 使用路径参数如
/todos/{todo_id}获取或删除特定事项。
保持探索精神,FastAPI还有更多高级功能如依赖注入、异步支持等,等你来解锁。祝你学习愉快,快速成为Web开发高手!