依赖注入 Depends
一、什么是依赖注入依赖注入就是在视图函数执行之前先执行一段公共逻辑代码这段代码处理完毕后可以吧返回结果交给视图函数使用适用业务场景1.复用公共业务逻辑消除重复代码2.统一获取数据库连接3.接口安全校验、参数校验、角色权限判断4.分页、查询参数统一处理核心思想把重复的代码抽离出来做成依赖项那些接口需要就在哪个接口注入这个依赖不用重复每个接口写一遍二、函数作为依赖项函数依赖把公共逻辑封装成普通函数使用Depends(函数名)完成注入。这里示例多个列表查询接口都需要q搜索条件、skip偏移、limit分页条数就可以抽成公共依赖函数。from fastapi import FastAPI, Depends from typing import Dict app FastAPI() # 定义依赖函数公共查询参数 async def common(q: str | None None, skip: int 0, limit: int 10): return {q: q, skip: skip, limit: limit} # 接口1获取items #依赖函数返回的是什么类型就写什么类型这里的是Dict app.get(/items) async def read_items(common: Dict Depends(common)): print(common.get(q), common.get(skip), common.get(limit)) return {message: ok} # 接口2获取users复用同一套依赖 app.get(/users) async def read_users(common: Dict Depends(common)skip: int1): return common提示视图函数除了注入的依赖还可以继续写自己独有的查询参数二者可以共存(如接口2所示)。三、类作为依赖项类依赖当业务逻辑负责除了接收参数还需要封装很多工具方法就推荐使用类依赖FastAPI 会自动执行类的__init__方法接收 url 查询参数实例化对象传给接口。from fastapi import FastAPI, Depends app FastAPI() fake_items_db [{item_name: Foo}, {item_name: Bar}, {item_name: Baz}] # 类依赖 class CommonQueryParams: def __init__(self, q: str | None None, skip: int 0, limit: int 100): # 接收查询参数赋值实例属性 self.q q self.skip skip self.limit limit # 类中自定义业务方法 def get_query_params(self): query_params [] if self.q: query_params self.q.split( ) return query_params app.get(/items/) async def read_items(commonsDepends(CommonQueryParams)): response {} if commons.q: response.update({q: commons.q}) items fake_items_db[commons.skip: commons.skip commons.limit] response.update({items: items}) return response app.get(/books) async def get_books(paramsDepends(CommonQueryParams), skip: int 0): # 可以调用依赖类里面的方法 print(params.q) print(params.get_query_params()) print(接口自身的skip参数, skip) return {message: ok}关键知识点Depends(CommonQueryParams)只写类名不要写括号CommonQueryParams()FastAPI 会自动实例化。拿到的params是类的实例对象可以直接访问self属性调用类内部定义的方法。注入依赖之后接口依旧可以声明属于自己的独立参数互不冲突。四、函数依赖 vs 类依赖怎么选类型适用场景函数依赖逻辑简单只做参数处理、返回字典不需要封装方法类依赖逻辑复杂需要封装多个业务工具方法属性较多五、总结Depends依赖注入核心价值抽离公共逻辑消除大量重复代码。函数依赖简单场景返回字典数据。类依赖复杂场景可以拥有实例属性、自定义成员方法。依赖注入参数 接口自有参数可以共存互不干扰。实际项目中权限校验、获取 db 会话、统一分页都会大量使用依赖注入。

相关新闻

为什么你的SpringBoot接口总是慢半拍

为什么你的SpringBoot接口总是慢半拍

深夜十一点,你的接口响应时间从50ms飙到800ms,监控面板上的红线像心电图一样刺眼。你翻遍日志,发现既没有报错,也没有慢SQL,可用户就是反馈“转圈圈”。别急着怪服务器,SpringBoot接口的每一次“慢半拍”&a…

2026/8/23 23:00:25 阅读更多 →
机械键盘电路板制作指南,工程师揭秘核心要点

机械键盘电路板制作指南,工程师揭秘核心要点

机械键盘电路板制作指南,工程师揭秘核心要点 你有没有这样的疑惑, 精心挑选了轴体, 精心挑选了键帽, 将它们组装出来的键盘, 手感却老是达不到自己的期望? 问题或许出在一块毫不起眼的电路板上面。 身为一名和键盘PCB有所关联的工程师, 在今天这个日子, 我引领你去…

2026/8/23 23:00:25 阅读更多 →
英伟达:AI智能体的真正功臣是“缰绳”而非模型

英伟达:AI智能体的真正功臣是“缰绳”而非模型

在AI开发领域,一个根深蒂固的观念是:模型能力决定一切。然而,英伟达最新发布的研究却给出了一个反直觉的结论——在AI智能体中,真正决定任务成败的,往往是那根牵住模型的“缰绳”(harness)&…

2026/8/23 22:59:24 阅读更多 →

最新新闻

Agent用例生成进阶:从测试策略到Pytest代码

Agent用例生成进阶:从测试策略到Pytest代码

概述 上一篇做了测试策略,输入需求,输出JSON。但CI流水线不认JSON,它要的是pytest能跑的东西,这篇就把测试策略转成Pytest代码。 现在我们有策略,策略里啥都有,场景、预期、类型、优先级。把这些喂给AI&…

2026/8/23 23:48:50 阅读更多 →
C++函数指针语法和类型

C++函数指针语法和类型

函数指针是 C/C 中一种将函数地址作为变量存储和传递的机制,它允许程序在运行时动态选择并调用不同的函数,是实现回调、策略模式和插件系统的核心基础。核心语法结构函数指针的声明语法遵循“返回类型 (*指针名)(参数列表)”的格式。例如,声明…

2026/8/23 23:48:50 阅读更多 →
Go服务生产环境的生存规则,你知道几条?

Go服务生产环境的生存规则,你知道几条?

Go 让你很容易就能写出一段“能编译、能通过冒烟测试、一遇到真实流量就跪”的代码。这门语言默认给你很少——没有运行时异常可以捕获,没有框架护栏,没有魔法。这是个特性,但这也意味着:让一个服务在生产环境活下去的规则&#x…

2026/8/23 23:48:50 阅读更多 →
后备箱里的汉中乡愁:一台车,装满故乡的烟火与牵挂

后备箱里的汉中乡愁:一台车,装满故乡的烟火与牵挂

对于很多汉中家庭,汽车后备箱,是独属于陕南人的乡愁容器。逢年过节从乡下返回城里,后备箱被父母塞得满满当当:自家腌制的腊肉、土蜂蜜、新鲜蔬菜、核桃馍,大大小小袋子塞满每一处缝隙。车子,成为城乡之间情…

2026/8/23 23:47:50 阅读更多 →
薄膜开关设计到开模的工程确认清单

薄膜开关设计到开模的工程确认清单

薄膜开关从设计文件完成到正式开模量产之间,存在一个工程确认环节。这个环节的目的是确保设计文件中的各项参数和要求能够在量产中稳定实现,避免开模后发现设计缺陷导致返工和延误。宝盛达在多年的薄膜开关制造服务中,总结了一套工程确认清单…

2026/8/23 23:47:49 阅读更多 →
在 VS Code 的 Copilot Chat 中接入 DeepSeek V4以及使用教学(无需复杂配置)

在 VS Code 的 Copilot Chat 中接入 DeepSeek V4以及使用教学(无需复杂配置)

一、前言 GitHub Copilot 是集成在 VS Code 中的 AI 编程助手,可以帮助我们解释代码、修改项目、排查错误以及执行 Agent 任务。 如果想在 Copilot Chat 中使用 DeepSeek,过去通常需要手动配置 API 地址、模型名称和各种参数。现在借助 DeepSeek V4 fo…

2026/8/23 23:47:49 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →