FastAPI 教程

5.7 异步依赖项

FastAPI入门教程:Python初学者快速上手异步Web开发

FastAPI 教程

专为Python初学者设计的FastAPI入门教程,无Web开发经验也能轻松学习。通过生活化类比和动手实践示例,快速掌握FastAPI基础、异步依赖项和API构建,建立信心。

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

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

了解更多

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文档,学习更多高级功能如数据库集成、身份验证等。享受编程的乐趣吧!

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

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

获取工具包