FastAPI 中的 depends 怎么使用?FastAPI 中 depends 的使用方法

在 FastAPI 中,depends是一个关键的功能,用于声明和注入依赖项(dependencies)到路由处理函数中,以便处理函数可以使用这些依赖项来获取数据、执行验证、进行身份认证等操作。

用 Apifox,节省研发团队的每一分钟

FastAPI 中的 depends 怎么使用?FastAPI 中 depends 的使用方法

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

FastAPI 中,depends是一个关键的功能,用于声明和注入依赖项(dependencies)到路由处理函数中,以便处理函数可以使用这些依赖项来获取数据、执行验证、进行身份认证等操作。依赖项是 FastAPI 中的一个重要概念,有助于编写干净、可维护的代码。

FastAPI 中的 depends 的用法
FastAPI 官网

基本概念

在 FastAPI 中,depends 是一个用于管理依赖关系的工具。依赖关系是一个函数,它接受请求参数并返回一个值,通常用于处理请求前的预处理或验证操作。depends 可以用于以下情况:

  • 验证请求的参数
  • 从数据库中检索数据
  • 验证用户身份
  • 执行其他任何需要在处理请求之前完成的任务
    depends 可以作为函数参数传递给路由处理函数,以便在请求处理之前运行。它们可以帮助你编写更干净、可维护的代码,以及更容易进行单元测试。

常用方法

1. 基本依赖

首先,让我们看一个简单的例子,演示如何创建一个基本的依赖:

from fastapi import FastAPI, Depends

app = FastAPI()

def get_current_user():
    return {"username": "user123"}

@app.get("/items/")
async def read_items(current_user: dict = Depends(get_current_user)):
    return {"message": "Hello, " + current_user["username"]}

在这个例子中,get_current_user 函数是一个依赖,它返回一个包含当前用户信息的字典。路由处理函数 read_items 中的 current_user 参数使用了该依赖,因此在每次请求时都会执行 get_current_user 函数。

2. 多个依赖

你可以使用多个依赖来构建复杂的依赖链。例如,你可以创建一个依赖来验证用户是否已登录,然后创建另一个依赖来从数据库中检索用户的信息。

from fastapi import FastAPI, Depends

app = FastAPI()

def get_user_token():
    return "fake_token"

def get_user_from_token(token: str = Depends(get_user_token)):
    return {"username": "user123"}

@app.get("/items/")
async def read_items(user: dict = Depends(get_user_from_token)):
    return {"message": "Hello, " + user["username"]}

3. 带参数的依赖

有时,你需要将参数传递给依赖函数。你可以使用带有参数的函数来创建依赖。

from fastapi import FastAPI, Depends

app = FastAPI()

def get_user_by_id(user_id: int):
    return {"user_id": user_id, "username": "user123"}

@app.get("/items/{user_id}/")
async def read_items(user: dict = Depends(get_user_by_id)):
    return {"message": "Hello, " + user["username"]}

实践案例

为了演示 depends 的实际使用,让我们创建一个基本的路由和依赖示例:

from fastapi import Depends, FastAPI

app = FastAPI() 

# 1. 定义依赖函数
# 可以接收参数并返回结果
async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

# 2. 在路径操作函数中添加依赖
# 使用 Depends 类注入依赖函数
# 依赖函数的结果会作为参数传入
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
    return commons
    
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="127.0.0.1", port=8000)

在这个示例中,依赖函数 common_parameters 用来提取和验证查询参数 q、skip、limit。它接受这三个参数,并返回一个字典作为结果。在路径操作函数 read_items 中,使用 Depends 注入了 common_parameters 依赖。这样 common_parameters 会先执行,它的返回字典会作为 commons 参数传入 read_items。这样就避免了在每个路径操作函数中重复验证参数的代码。通过依赖注入,可以将逻辑拆分到各个可重用的函数中,让每个函数职责单一,遵循代码模块化的最佳实践。

FastAPI 中 depends 实践案例结果
FastAPI 中 depends 实践案例结果

提示、技巧和注意事项

  • 使用依赖来组织和重用代码,以避免在路由处理函数中编写重复的代码。
  • 你可以使用异步依赖函数来执行异步操作,例如从数据库中检索数据。
  • 谨慎使用依赖,不要过度使用,以避免过多的依赖链导致代码难以维护。

使用 Apifox 调试 FastAPI 接口

如果你是 FastAPI 开发者,你经常需要与 API 打交道,确保你的应用程序能够正常工作。这时,一个强大的接口测试工具就会派上用场。

Apifox 是一个比 Postman 更强大的接口测试工具,Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。在写完服务接口时,测试阶段可以通过 Apifox 来校验接口的正确性,图形化界面极大的方便了项目的上线效率。


如果想快速的调试一条接口,新建一个项目后,在项目中选择“调试模式”,填写请求地址后即可快速发送请求,并获得响应结果,上文的实践案例如图所示:

使用 Apifox 调试后端 FastAPI 接口
Apifox 调试接口

总结

在 FastAPI 中,depends 是一个强大的工具,用于管理依赖关系,使你能够更轻松地处理请求和响应。本文介绍了 depends 的基本概念、常用方法和实际案例,希望能够帮助你更好地使用 FastAPI 构建高效的 Web 应用程序。

知识扩展:



参考链接:

  • FastAPI 官方文档:https://fastapi.tiangolo.com/
  • FastAPI GitHub 仓库:https://github.com/tiangolo/fastapi