惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
V
V2EX
PCI Perspectives
PCI Perspectives
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 叶小钗
V
Visual Studio Blog
Jina AI
Jina AI
P
Proofpoint News Feed
罗磊的独立博客
SecWiki News
SecWiki News
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
NISL@THU
NISL@THU
T
Tailwind CSS Blog
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
G
GRAHAM CLULEY

博客园 - 一名程序媛呀

Anki插件开发必知必会:钩子函数与右键菜单定制 httpx 传参总报错?这次把 GET、POST、文件上传到响应处理的坑给你一次填平 从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战) 还在 XHR、Fetch 和 Axios 之间纠结?我踩过的坑,希望你一个都不用碰到 你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南 Uvicorn、Gunicorn 傻傻分不清?FastAPI 生产部署避坑指南 Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招! 刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API 别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了 掏出手机就能搭个 WebDAV 同步服务器?这操作有点香 别只盯着GitBook了!这个文档神器让你的笔记秒变网站 写爬虫时用了代理还被封?Python 代理的那些隐藏坑,我替你踩明白了 FastAPI 身份验证总踩坑?这份 FastAPI Users “避坑指南”请收好 旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了 你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透 写页面时别再把 Element Plus 整个搬进来啦!Vue3按需加载的坑我帮你踩平了 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南) 聊聊 fetch 使用中我踩过的那些坑和正确打开方式 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 告别 Typora 后的新欢:我把所有笔记迁移到了 Obsidian 这个“第二大脑” 你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线 让 FastAPI Agent 思考不阻塞:手把手教你实现异步任务与后台处理方案 让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践 FastAPI Agent 函数调用实战:我让 AI 学会了“自己动手查天气“ 初探:用 FastAPI 搭建你的第一个 AI Agent 接口 FastAPI 生产环境静态文件完全指南:从 /favicon.ico 404 到 HSTS 混合内容,一次全根治 用了loguru我才明白,Python日志还能这么写 FastAPI 后台任务:BackgroundTasks 的使用场景与注意事项 FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚 FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底 FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上 FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透 FastAPI订单防超卖实战:从数据库锁到Saga分布式事务,这一篇给你理清了 FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了! FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 Vue 3 组合式 API 香是香,但从Vue2迁移时你可别像我当初一样踩进这 3 个深坑里 我用fastapi-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! FastAPI自动生成的API文档太丑?我花了一晚上把它改成了客户愿意付费的样子 告别手写 API 胶水代码:FastAPI 与 Vue 的“契约自动机” OpenAPI 实战 FastAPI + Vue 前后端分离实战:我的项目结构“避坑指南” FastAPI + Celery 实战:异步任务里调用 Redis 和数据库的全解析,及生产级组织方案 FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了! FastAPI + Celery 实战:异步任务的坑与解法,我帮你踩了一遍 FastAPI子应用挂载:别再让root_path坑你一夜 FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞! 别再数据线了!用FastAPI 5分钟搭个局域网文件+剪贴板神器 FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香! FastAPI状态共享秘籍:别再让中间件、依赖和路由“各自为政”了! FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了! 从0到1,FastAPI + PostgreSQL + Tortoise ORM 实战避坑指南 FastAPI + PostgreSQL 实战:给应用装上“缓存”和“日志”翅膀 FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
FastAPI 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60%
一名程序媛呀 · 2026-05-03 · via 博客园 - 一名程序媛呀

你是不是也这样:项目里的路由越写越多,每个需要权限校验的端点前,都得毕恭毕敬地加上一长串 Depends(verify_admin),感觉像个到处贴封条的保安?

试想要给一个后台管理系统加角色权限,30多个接口函数,光是写那些重复的依赖注入,就能让你怀疑人生。眼睛一花,漏掉一个,测试小哥立刻在群里@你:“有后门”。

今天,咱们就聊聊用 FastAPI 的 APIRouter 来根治这个痛点。这法子在我看来,就像给一组接口请了个称职的“门禁管家”,你只需吩咐一次,整栋楼都能守得明明白白。

🎯 把重复的依赖,扔给路由去管

FastAPI 里的依赖注入绝对是个好东西,但“到处粘贴”这个动作本身,就是坏味道的开始。代码重复,不光看着累,更是滋养 Bug 的温床。

咱们可以把这理解成去不同的餐厅吃饭。以前你得进一家店就掏一次身份证,现在呢,我们在整个商场入口统一核查。舒服了。

这个“商场入口”,就是 APIRouter。快看看下面这行代码,它就是今天的主角:

router = APIRouter(
    prefix="/admin",
    tags=["管理后台"],
    dependencies=[Depends(verify_admin)]
)

别小看这三行配置。这意味着,挂在这个 router 下的所有路径,都已经自动拥有了管理员身份验证。从此,你的端点函数可以专心写业务逻辑,干干净净。

你可能会问,这能省多少事?
咱们心里默默算笔账,一个项目如果有100个需要鉴权的端点,这个技巧就能帮你减少60%以上的重复依赖声明。关键是,一个不漏,安全感爆棚。

💡 拆解三件套:prefix、tags、dependencies

好,咱们来细品这三个宝贝,我把平时踩坑的经验一并拌进去。

👒 prefix:路径前缀的魔法师

它就像给所有端点套了个文件夹,直接让你免去手写重复路径。

但这里有个我栽过的跟头:prefix 末尾千万别顺手加个斜杠。比如写成 /admin/,这样当你定义 @router.get("/users") 时,生成的路径容易变成 /admin//users。虽然FastAPI有容错,但规范一点总没坏处。

🏷️ tags:自动归类的文档小能手

你在 Swagger 文档页上面看到的接口分组,就靠它了。
在路由里统一打标签,能保证同一个组里的接口乖乖待在一起。再也不用在每个端点上单点加 tag 了。
这对于像我这样有轻微强迫症的人来说,简直是福音。

🔗 dependencies:不出错的“门禁牌”

这是灵魂。官方推荐的最佳实践,就是把那些“不干不行、人人得做”的公共逻辑往上提。比如用户验证、角色校验。

Depends 放到路由层面,意味着你从架构上就杜绝了“忘记加”的可能。

⚡️ 实战:从混乱到清爽的“抄近道”

假设我们刚接手一个烂摊子,后台接口散落各处,权限验证像打补丁。咱们现在就动手重构它。

# app/admin_router.py
from fastapi import APIRouter, Depends

def verify_admin():
    # 这里是我一贯的写法,角色校验越简单越好,别绕弯子
    print("身份验证通过: 管理员")
    return {"is_admin": True}

router = APIRouter(
    prefix="/admin",
    tags=["🎛️ 管理员面板"],
    dependencies=[Depends(verify_admin)]
)

# 函数体是不是清爽多了?没有烦人的Depends了!
@router.get("/dashboard")
async def admin_dashboard():
    return {"message": "欢迎来到控制台!"}

@router.get("/users")
async def list_users():
    return {"users": ["Alice", "Bob"]}

在上面这段代码里,无论是访问 /admin/dashboard 还是 /admin/users,都会先打印那句“身份验证通过”。这感觉多顺滑。

再说个容易翻车的点:include_router 里的依赖怎么合并?

# main.py
from fastapi import FastAPI, Depends
from app.admin_router import router as admin_router

async def global_logging():
    print("全局日志记录中...")
    return True

app = FastAPI()

app.include_router(
    admin_router,
    dependencies=[Depends(global_logging)]
)

重点来了!这时候的执行顺序是:先全局,后路由
也就是请求进来,先记日志,再验管理员。

官方文档里最容易被忽略的一句话就是“依赖项会从左到右、从全局到局部执行”。
根据以往的经验,这种全局日志、埋点的事情,丢在主应用的 include 级别最合适,别再往路由里掺和了。

你以为这就完了?还没有。如果你的项目有“超级管理员”区和“普通管理员”区,可以优雅地使用子路由嵌套
让不同的 APIRouter 各自管好自己的 prefix 和 dependencies,最后在一个主管理路由里统一引用。就像俄罗斯套娃,层层包裹,职责分明。

💎 最后啰嗦一句

技术选型像穿鞋,合脚最重要。但在“代码清扫”这件事上,把依赖提到路由层级,几乎是我这些年做后端重构百试不爽的一招。它能真正帮你把“以防万一忘了”的被动心态,转变成“从框架上就万无一失”的笃定。

下回见着那种满屏都是 Depends 的代码,可别傻乎乎也跟着敲。心里要立刻拉起警报:是时候请个“管家”了。

好了,今天的嗑就唠到这儿。如果这个技巧让你产生了去翻翻旧代码的冲动,那我这篇文章就没白写。还有什么想聊的,可以评论区里留言,记得点赞关注下,别走丢喽!👇