FastAPI 学习之路(二十二)依赖项

本文介绍FastAPI中的依赖注入系统,该系统使开发人员能够轻松集成组件,并通过几个简单示例展示了如何利用依赖注入来减少代码重复,提高复用性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FastAPI 提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。

什么是依赖注入?

         声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」的一种方式。

然后,由系统(本文中为 FastAPI)负责执行任意需要的逻辑,为代码提供这些依赖(注入依赖项)。

依赖注入常用于以下场景:

  • 共享业务逻辑(复用相同的代码逻辑)
  • 共享数据库连接
  • 实现安全、验证、角色权限
  • 等……

上述场景均可以使用依赖注入,将代码重复最小化。

接下来,我们学习一个非常简单的例子,尽管它过于简单,不过很实用。

from fastapi import FastAPI, Depends
from typing import Optional

app = FastAPI()

def common_params(q: Optional[str] = None, skip: int = 0, limit: int = 10):
    return {"q": q, "skip": skip, "limit": limit}


@app.get("/items")
def read_items(commons: dict = Depends(common_params)):
    return commons


@app.get("/users")
def read_users(commons: dict = Depends(common_params)):
    return commons


if __name__ == '__main__':
    import uvicorn
    uvicorn.run("main:app", reload=True, debug=True)

我们看下最后的请求

依赖项函数的形式和结构与路径操作函数一样。

因此,可以把依赖项当作没有「装饰器」(即,没有 @app.get("/path") )的路径操作函数。

依赖项可以返回各种内容。

本例中的依赖项预期接收如下参数:

  • 类型为 str 的可选查询参数 q
  • 类型为 int 的可选查询参数 skip,默认值是 0
  • 类型为 int 的可选查询参数 limit,默认值是 100

然后,依赖项函数返回包含这些值的 dict。

 接收到新的请求时,FastAPI 执行如下操作:

  • 用正确的参数调用依赖项函数(「可依赖项」)
  • 获取函数返回的结果
  • 把函数返回的结果赋值给路径操作函数的参数  

FastAPI 兼容性

依赖注入系统如此简洁的特性,让 FastAPI 可以与下列系统兼容:

  • 关系型数据库
  • NoSQL 数据库
  • 外部支持库
  • 外部 API
  • 认证和鉴权系统
  • API 使用监控系统
  • 响应数据注入系统
### 关于 FastAPI学习教程和资源 #### 一、初识 FastAPI FastAPI 是一个现代、高性能的 Python Web 框架,专为构建 API 设计。其特点在于利用 Python 类型提示来提供自动化的数据验证功能,并能自动生成交互式的 API 文档。这使得开发者可以更专注于业务逻辑而非框架细节[^1]。 #### 二、环境配置与安装 为了开始使用 FastAPI 进行开发,首先需要确保已正确安装 Python 环境。对于大多数情况来说,建议使用最新稳定版本的 Python 来获得更好的兼容性和安全性支持。完成 Python 安装之后,则可以通过 pip 工具轻松安装 FastAPI 及其他依赖项。 ```bash pip install fastapi[all] ``` 此命令会安装 FastAPI 和推荐使用的 ASGI 服务器 Uvicorn,后者负责运行应用程序实例[^2]。 #### 三、创建第一个 FastAPI 应用程序 通过一段简单的代码即可启动一个基本的服务端点: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} ``` 上述脚本定义了一个根路径处理器函数 `root` ,当访问 `/` 路径时返回 JSON 响应消息 “Hello World”。这里采用的是异步编程风格(`async`),这是 FastAPI 支持的一种提高并发处理能力的方式之一。 #### 四、深入理解 RESTful 接口设计原则 RESTful 接口遵循特定的设计模式,其中每个 URL 表示一种资源;而 HTTP 方法(如 GET, POST, PUT, DELETE)则对应着对该资源执行的不同操作。这些请求之间保持无状态特性,意味着每次调用都是独立完整的事务,不会保留任何上下文信息。此外,在 C 或 B/S 架构下,客户端和服务端之间的通信通常以 JSON 格式交换数据。 #### 五、探索更多官方文档及其他优质资料 除了以上基础内容外,还有许多值得深入了解的知识领域等待挖掘,比如参数校验、安全认证机制等高级话题。为此,强烈推荐阅读由社区维护者精心编写的 [FastAPI 官方文档](https://fastapi.tiangolo.com/) 。该网站不仅提供了详尽的功能说明和技术指南,还包含了大量实用案例供参考学习。 另外,网络上也存在不少优质的第三方博客文章或视频课程可以帮助加深理解和实践技能。例如 GitHub 上的一些开源项目以及 YouTube 平台上针对不同难度级别的教学系列都非常有帮助价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值