5.7 异步依赖项
FastAPI入门教程:Python初学者快速上手异步Web开发
专为Python初学者设计的FastAPI入门教程,无Web开发经验也能轻松学习。通过生活化类比和动手实践示例,快速掌握FastAPI基础、异步依赖项和API构建,建立信心。
FastAPI入门教程:Python初学者快速上手Web开发
简介
FastAPI是一个现代、快速的Python Web框架,特别适合构建API。想象一下,你开了一家智能餐厅:FastAPI帮你定义菜单(API端点),顾客(客户端)点餐(发送请求),而你快速响应(返回数据)。这个教程将带你从零开始,体验构建自己的第一个Web应用的成功时刻!
前置条件
- 基本Python语法知识:比如变量、函数和条件语句。
- 已安装Python 3.6或更高版本。如果没安装,先去Python官网下载安装。
安装FastAPI
打开终端或命令行,运行以下命令安装FastAPI和一个服务器工具:
pip install fastapi uvicorn
Uvicorn是ASGI服务器,就像餐厅的厨房设备,帮你快速处理请求。
第一个FastAPI应用:Hello World!
创建文件 main.py,写入以下代码:
from fastapi import FastAPI
# 创建FastAPI实例,就像开一家新餐厅
app = FastAPI()
@app.get("/") # 定义一个主页路由,就像餐厅的欢迎标语
def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}") # 带路径参数的路由,比如获取特定物品
def read_item(item_id: int):
return {"item_id": item_id}
运行应用:
uvicorn main:app --reload
在浏览器打开 http://127.0.0.1:8000,你会立即看到JSON响应:{"message": "Hello, World!"}。恭喜!这是你的第一个成功时刻——Web应用运行起来了!
生活化类比:这就像餐厅开张了,顾客访问主页看到一个欢迎消息。
添加查询参数:让API更灵活
修改 main.py,在 read_item 函数中添加查询参数:
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None): # q是可选查询参数
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
访问 http://127.0.0.1:8000/items/123?q=fastapi,响应会包含 q 参数。另一个成功时刻——你的API现在能处理更复杂的请求了!
类比:就像顾客点餐时可以选择附加选项,比如“加辣”。
使用请求体:接收JSON数据
假设你想接收详细的订单数据。使用Pydantic模型来定义数据结构:
from pydantic import BaseModel
class Item(BaseModel): # 定义物品模型,就像餐厅的菜单项
name: str
price: float
is_offer: bool = None # 可选字段
@app.post("/items/") # POST请求,用于创建新物品
def create_item(item: Item):
return item # 直接返回接收到的数据
使用curl命令测试(如果没有curl,可以用Postman工具):
curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" -d '{"name":"Widget","price":9.99,"is_offer":true}'
你会收到相同的JSON响应。成功!你的API现在能处理创建请求了。
类比:这就像顾客提交了一份详细的订单,你确认后返回给厨房。
异步依赖项:高效处理多个请求
FastAPI支持异步编程,让服务器能同时处理多个请求,就像服务员同时服务多桌客人。我们来添加异步依赖项。
from fastapi import Depends
import asyncio
# 定义一个异步依赖项函数,用于共享常见参数
async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
# 这里可以模拟异步操作,比如从数据库查询
await asyncio.sleep(1) # 模拟耗时操作,比如准备食材
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)): # 使用依赖项
return commons
访问 http://127.0.0.1:8000/items/?q=test&skip=10,你会看到参数被正确处理。这个成功时刻展示了异步如何提高效率!
生活化类比:依赖项就像预先准备的调料包,可以快速用于多道菜,节省时间。
自动API文档:另一个惊喜
FastAPI自动生成交互式API文档。运行应用后,访问 http://127.0.0.1:8000/docs,你可以在浏览器中直接测试所有API端点。这是建立信心的绝佳时刻——看到自己构建的API有专业文档!
总结和下一步
通过这个教程,你学会了:
- 创建FastAPI应用并运行。
- 定义路由、路径参数和查询参数。
- 使用Pydantic模型处理请求体。
- 添加异步依赖项提升性能。
动手实践建议:尝试修改代码,比如添加新路由、返回自定义数据,或结合真实项目如待办事项列表。记住,实践出真知!
继续探索FastAPI文档,学习更多高级功能如数据库集成、身份验证等。享受编程的乐趣吧!