FastAPI 依赖项 (yield):如何手动调用它们

FastAPI 依赖项 (yield):如何手动调用它们

在本文中,我们将介绍FastAPI的依赖项(yield)以及如何手动调用它们。FastAPI是一个快速(高性能)、易于使用、基于标准的Python类型注解编写API的框架。它使用依赖注入的方式来处理请求参数和其他依赖项。

阅读更多:FastAPI 教程

FastAPI依赖项

FastAPI允许我们使用依赖项来自动将请求参数传递给API路由函数。这些依赖项可以是单个参数,也可以是多个参数。依赖项可以是基于其他依赖项的结果。我们可以通过多种方式定义依赖项,其中一种方式是使用yield关键字。

让我们看一个例子:

from fastapi import Depends, FastAPI

app = FastAPI()


def get_db():
    db = "dummy_database"
    yield db  # 使用yield关键字将db返回
    print("关闭数据库连接")  # yield之后的代码将在依赖项解析完成后执行


def get_current_user(db: str = Depends(get_db)):
    print("从数据库获取当前用户")
    return "fake_user"


@app.get("/users/")
async def read_users(current_user: str = Depends(get_current_user)):
    return {"current_user": current_user}

在上面的例子中,我们定义了一个依赖项函数get_db(),它返回一个数据库连接对象。然后我们定义了另一个依赖项函数get_current_user(),它的参数是db: str = Depends(get_db),表示它依赖于get_db()函数的结果。在get_current_user()函数中,我们使用print()语句来模拟获取当前用户,并返回一个虚拟用户。

最后,我们定义了一个GET请求的API路由函数read_users(),它的参数是current_user: str = Depends(get_current_user),表示它依赖于get_current_user()函数的结果。

当我们访问/users/路径时,FastAPI会自动调用依赖项函数,并将结果传递给API路由函数read_users()

手动调用依赖项

虽然FastAPI会自动调用依赖项函数,但也有时候我们需要手动调用依赖项函数并获取它的返回值。这种情况可以在单元测试或其他特殊情况下发生。要手动调用依赖项函数,我们可以使用Depends()函数来创建一个依赖项,然后使用Depends()实例的__call__()方法来调用它。

让我们看一个例子:

from fastapi import Depends, FastAPI

app = FastAPI()


def get_db():
    db = "dummy_database"
    return db


def get_current_user(db: str = Depends(get_db)):
    return "fake_user"


@app.get("/users/")
async def read_users(current_user: str = Depends(get_current_user)):
    return {"current_user": current_user}

在上面的例子中,我们定义了两个依赖项函数get_db()get_current_user(),它们的实现逻辑与之前的例子相同。在API路由函数read_users()中,我们使用了get_current_user()函数作为依赖项。

现在,如果我们想在其他地方手动调用get_current_user()函数,可以使用以下代码:

dependency = Depends(get_current_user)  # 创建一个依赖项
current_user = dependency()  # 调用依赖项并获取返回值
print(current_user)  # 打印当前用户

我们首先通过Depends(get_current_user)创建了一个依赖项实例dependency,然后通过调用dependency()来手动调用依赖项函数get_current_user(),并将结果赋值给current_user变量。最后,我们打印了当前用户。

这样,我们就可以在需要的地方手动调用依赖项函数,并获取它的返回值。

总结

本文介绍了FastAPI依赖项(yield)以及如何手动调用它们。我们了解了如何定义和使用依赖项,并通过示例代码演示了自动调用和手动调用依赖项的方式。通过合理使用依赖项,我们可以更好地管理API的参数和其他依赖关系,提高代码的可维护性和可测试性。

FastAPI提供了强大的依赖注入功能,使得编写API变得更加简单和高效。希望本文对你理解FastAPI的依赖项及其使用方法有所帮助。如果你有任何疑问或问题,可以查阅FastAPI官方文档或在社区寻求帮助。快乐编码!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程