27 中间件与依赖注入之全局依赖与路径依赖

在前面的章节中,我们讨论了 FastAPI依赖注入的基本用法。在这一篇中,我们将深入探讨全局依赖与路径依赖的概念以及如何在 FastAPI 中实现它们。这将对我们后续的数据库操作提供良好的基础。

依赖注入的概念

FastAPI 中,依赖注入的核心思想是将一个部分的功能(即依赖)传递给其他部分,而不是在每个部分中重复实现。这可以帮助我们保持代码的整洁和可维护性。全局依赖和路径依赖都是依赖注入的一种实现方式。

全局依赖

全局依赖是指在整个应用中都可以使用的依赖。无论哪个路径调用,都会自动使用这些依赖。

实现全局依赖

FastAPI 中,我们可以通过 app.dependency_overrides 来实现全局依赖。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

# 创建一个简单的依赖
def get_query_param(q: str = None):
return q

# 将其设置为全局依赖
app.dependency_overrides[get_query_param] = lambda: "全局依赖注入的查询参数"

@app.get("/")
async def read_root(query_param: str = Depends(get_query_param)):
return {"message": f"你传入的全局依赖参数是: {query_param}"}

在这个示例中,无论何时调用根路径 /,都会自动使用 get_query_param 的全局依赖。在这个例子中,返回的消息将始终为 "全局依赖注入的查询参数"

路径依赖

路径依赖是指仅在特定路径中使用的依赖。可以根据不同的路径定义不同的依赖,允许更多的灵活性。

实现路径依赖

我们可以在 path operation 函数中使用依赖注入,轻松实现路径依赖。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
from fastapi import FastAPI, Depends

app = FastAPI()

# 创建一个特定于路径的依赖
def get_user(user_id: int):
return {"user_id": user_id}

@app.get("/users/{user_id}")
async def read_user(user: dict = Depends(get_user)):
return {"message": f"你获取到的用户ID是: {user['user_id']}"}

在这个示例中,get_user 依赖仅在 GET /users/{user_id} 路径中使用。我们可以看到,这种方式允许我们为每个路径定义特定的依赖。

小结

FastAPI 中,全局依赖和路径依赖是非常有用的功能,帮助我们实现灵活且可重用的代码结构。全局依赖适合在整个应用中使用的通用功能,而路径依赖则适合于特定路径且有可能不同的任务或逻辑。通过合理地利用这两种依赖注入的方式,我们能够编写出清晰且易于维护的 API。

在下一节中,我们将探索如何使用 SQLAlchemy 来连接数据库,这将使我们的应用变得更加强大,能够持久化数据。希望通过这些内容,你能够更加熟悉 FastAPI 中的依赖注入概念,为后续的数据库操作打下坚实的基础。

27 中间件与依赖注入之全局依赖与路径依赖

https://zglg.work/python-fastapi-zero/27/

作者

AI免费学习网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论