FastAPI 教程

13.3 异步依赖项与上下文管理器

FastAPI异步依赖项与上下文管理器:Python初学者入门教程

FastAPI 教程

这是一个面向Python初学者的详细FastAPI教程,专注于异步依赖项和上下文管理器的使用。通过生活化类比和简单代码示例,快速上手并建立Web开发信心。

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

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

了解更多

异步依赖项与上下文管理器:FastAPI入门教程

欢迎!如果你有Python基础,但对Web开发感到陌生,别担心!这个教程将带你轻松入门FastAPI,并重点学习异步依赖项和上下文管理器。我们避免枯燥理论,直接通过动手实践来体验成功时刻。

什么是依赖项?

想象一下去餐厅点餐:服务员(依赖项)为你准备食物,而不是自己冲进厨房。在FastAPI中,依赖项就像一个助手,帮你处理请求中的公共逻辑,比如验证用户或连接数据库。

什么是异步?

异步就像同时煮面和切菜,而不需要等面煮完再切菜。在Python中,异步编程使用asyncawait,可以高效处理多个任务,这在FastAPI中能提升Web应用性能。

什么是上下文管理器?

回忆一下用钥匙开门:你开门进去,用完后门自动锁上。上下文管理器在Python中用with语句实现,确保资源(如文件或数据库连接)被正确打开和关闭,避免泄露。

现在,让我们动手吧!你将一步步构建一个FastAPI应用,看到代码运行效果。

步骤1:设置环境

首先,确保Python 3.6+已安装。然后,在终端运行以下命令来安装FastAPI和Uvicorn(一个快速的ASGI服务器)。

pip install fastapi uvicorn

如果你的网络慢,可以用pip install fastapi uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple从清华镜像安装。

步骤2:创建你的第一个FastAPI应用

创建一个新文件,比如main.py,并写入以下代码。这是一个超简单的API,让你快速体验成功。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Hello, World!"}

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

uvicorn main:app --reload

访问 http://localhost:8000,你会看到 {"message": "Hello, World!"}。恭喜,你的第一个FastAPI API跑起来了!

步骤3:添加异步依赖项

依赖项可以是异步的。我们来创建一个简单的异步依赖项,模拟获取用户信息。在main.py中添加:

from fastapi import Depends

async def get_user():
    # 模拟异步操作,比如从数据库获取数据
    return {"user": "Alice", "age": 30}

@app.get("/user")
async def read_user(user_info: dict = Depends(get_user)):
    return {"user_data": user_info}

重启服务器(如果使用--reload,它会自动重启),访问 http://localhost:8000/user。你会看到 {"user_data": {"user": "Alice", "age": 30}}。成功!依赖项自动为我们提供了数据。

步骤4:使用上下文管理器

上下文管理器帮助我们管理资源。例如,模拟打开和关闭一个文件。在main.py中添加一个上下文管理器:

from contextlib import asynccontextmanager

@asynccontextmanager
async def open_resource():
    # 模拟打开资源
    print("Resource opened")
    yield {"resource": "file"}
    # 模拟关闭资源
    print("Resource closed")

@app.get("/resource")
async def use_resource():
    async with open_resource() as resource:
        return {"resource_data": resource}

重启后,访问 http://localhost:8000/resource。你会看到返回 {"resource_data": {"resource": "file"}},同时在终端看到“Resource opened”和“Resource closed”打印出来。这确保了资源被正确清理,就像自动锁门一样!

步骤5:结合异步依赖项和上下文管理器

现在,让我们结合两者来创建一个更实用的例子:模拟数据库连接。更新main.py

from contextlib import asynccontextmanager
from fastapi import Depends

# 模拟一个异步数据库上下文管理器
@asynccontextmanager
async def get_database():
    # 模拟连接数据库
    print("Database connected")
    yield {"db": "example_db", "status": "connected"}
    # 模拟断开连接
    print("Database disconnected")

# 异步依赖项使用上下文管理器
async def fetch_data():
    async with get_database() as db:
        # 模拟查询数据
        return {"data": "some data from database", "db_info": db}

@app.get("/data")
async def read_data(data_info: dict = Depends(fetch_data)):
    return {"result": data_info}

重启服务器,访问 http://localhost:8000/data。你会看到类似 {"result": {"data": "some data from database", "db_info": {"db": "example_db", "status": "connected"}}} 的响应,并在终端看到连接和断开的消息。太棒了!你已经学会了如何使用异步依赖项和上下文管理器来管理Web应用中的资源。

总结

通过这个教程,你已经:

  1. 安装了FastAPI并创建了第一个API。
  2. 添加了异步依赖项来处理请求数据。
  3. 使用上下文管理器来确保资源安全。
  4. 结合两者模拟了数据库操作。

记住,依赖项是你的助手,上下文管理器是你的自动门卫。多练习这些概念,尝试修改代码(比如改变返回的数据),你会越来越熟练。FastAPI文档(https://fastapi.tiangolo.com/)有更多高级内容,但你已经有了坚实的基础!

保持好奇心,继续探索Web开发的乐趣吧!如果你有任何问题,欢迎在Python社区中提问。祝你编码愉快!

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

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

获取工具包