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

推荐订阅源

H
Help Net Security
V
V2EX
博客园 - 【当耐特】
V
Visual Studio Blog
宝玉的分享
宝玉的分享
D
DataBreaches.Net
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
I
InfoQ
博客园 - Franky
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Commits to openclaw:main
Recent Commits to openclaw:main
AI
AI
WordPress大学
WordPress大学
Webroot Blog
Webroot Blog
L
LangChain Blog
Help Net Security
Help Net Security
V2EX - 技术
V2EX - 技术
TaoSecurity Blog
TaoSecurity Blog
O
OpenAI News
月光博客
月光博客
H
Hacker News: Front Page
F
Full Disclosure
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security Affairs
博客园 - 司徒正美
MyScale Blog
MyScale Blog
Vercel News
Vercel News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
J
Java Code Geeks
Simon Willison's Weblog
Simon Willison's Weblog
Recent Announcements
Recent Announcements
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
The Last Watchdog
The Last Watchdog
博客园_首页
C
Check Point Blog
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 一名程序媛呀

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 少有人提的实用技巧:把 Depends 依赖提到路由层,代码少写60% 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+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-scaff搭了个项目,两天工期缩到两小时,老板以为我开挂了
一名程序媛呀 · 2026-04-14 · via 博客园 - 一名程序媛呀

是不是每次开新项目,光是搭那个目录结构、配数据库、写那个重复了八百遍的 settings.py 就想摔键盘?🎯

反正我当年是。记得有一次,我信心满满地准备花两天搞定一个Demo的后端骨架,结果第一天晚上十一点了,我还在纠结是应该把路由单独拆一个文件,还是把所有的 Pydantic 模型放一块儿。那种感觉就像盖房子,地基还没挖好,人已经累趴了。

直到我遇见了它——fastapi-scaff 。一个能让你直接从“搬砖模式”切换到“创作模式”的脚手架。这不是什么官方钦定,而是社区里一位实在老哥写的好东西,专门治咱们这种“项目初始化PTSD”。

📦 这玩意儿到底能帮你省多少事?

一句话,它把 FastAPI 项目的 “最佳实践”固化成了代码模板

你不用再去网上搜“FastAPI项目结构推荐”,也不用拷贝上一个项目里乱七八糟的配置文件。它能给你直接生成一套包括异步SQLAlchemy数据库连接、Alembic数据库迁移、JWT/API Key认证、Docker部署支持、环境变量管理在内的完整骨架,甚至连Celery异步任务都集成好了。

本文能帮你解决:

  ⚡ 5分钟跑起来一个结构清晰、可直接开发的FastAPI项目。

  ⚡ 理解 fastapi-scaff 的核心目录作用,别在里面迷路。

  ⚡ 解决新手最容易碰到的环境变量加载失败、数据库连接不上的问题。

🛠️ 上手第一步:别怂,就是几条命令的事

好,咱们先来把它装上。这工具用起来和咱们熟悉的 create-react-app 或者 vue-cli 差不多,全程无痛。

1. 确保你有 Python 3.11+ 的环境。然后直接 uv 虚拟环境下安装它:

uv add fastapi-scaff

2. 装完之后,先看看帮助文档确认装对了:

fastapi-scaff -h

3. 接下来重点来了,在你想要创建项目的目录下,敲入这行命令:

fastapi-scaff new my_awesome_project

看着屏幕上一堆文件刷刷地创建出来,是不是有种莫名的舒适感?

Starting new project...
Done. Now run:
> 1. cd my_awesome_project
> 2. modify config, eg: db
> 3. pip install -r requirements.txt
> 4. python runserver.py

😌 控制台里输出以上内容,到这里,架子就搭好了。是不是以为这样就完了?别急着跑,直接 uvicorn main:app --reload 绝对行不通! 这个脚手架有自己的启动方式。

另外再说个好用的,脚手架支持四种项目模板,按需选择:

  - 标准模板(默认,不写 -t 就行)

  - 轻量模板: fastapi-scaff new <项目名> -t light

  - 微型模板: fastapi-scaff new <项目名> -t tiny

  - 单文件模板: fastapi-scaff new <项目名> -t single

如果你需要集成 Celery 做异步任务,创建项目时直接加参数: fastapi-scaff new myproject --celery

💣 最容易翻车的三个点(我全替你们趟过了)

你可能会问,不就是个脚手架吗,能有多坑?这里就是我当初头撞南墙的地方。

坑一:Python版本不对,安装直接失败

这个脚手架明确要求 Python >= 3.11 ,如果你还在用3.8、3.9,建议先升级。我当初在公司的老服务器上部署,Python 3.9直接报错,查了半天才发现是版本问题。

坑二:启动命令不是 uvicorn

这个脚手架有自己的入口脚本。进入项目目录后,先安装依赖:

uv add -r requirements.txt

然后运行项目用的是项目根目录下的 runserver.py

uv run runserver.py

官方文档虽然说了,但很多人都习惯性敲 uvicorn ,结果自然是一头雾水。

坑三:数据库迁移命令也变了

这个脚手架内置了Alembic迁移,但执行方式不是直接敲 alembic upgrade head ,而是通过项目里的脚本:

# 生成迁移文件
uv run runmigration.py generate init

# 执行迁移
uv run runmigration.py upgrade

再说个容易翻车的点:你需要在运行项目之前,先去 config/ 目录下把数据库配置改好,默认的数据库URL如果不改,启动照样报错。

.env 定义了环境变量的类型,app_xxx 是不同环境的具体配置信息,APP信息、数据库连接等就在这里面修改!!!

🚀 实战演示:跑起来,然后看看里面都有啥

填完上面的坑,现在进入项目目录,用你喜欢的IDE打开。

先把数据库迁移跑一下(前提是你已经配好了数据库连接):

uv run runmigration.py generate init
uv run runmigration.py upgrade

然后,启动服务:

uv run runserver.py

访问 http://127.0.0.1:8000/docs ,看到那个熟悉的 Swagger UI 界面没?恭喜你,骨架跑通了!

使用 create 接口创建一个 admin 角色的用户,然后使用 login 接口登录,拿到 token 后,输入到上面的 Authorize 中,然后就可以访问 list 用户列表了,否则会报权限错误!
这一套下来,妥妥的用户认证也有了!!!

这个脚手架的精髓在于模块化。它把项目比作一个精装房,架构是ASM(API-Services-Models):

  - app/api/ 目录就是你的客厅和卧室,所有接口路由都放这里。

  - app/services/ 目录是工具箱,业务逻辑往里塞。

  - app/models/ 是房子的承重墙(数据库表结构)。

  - app/initializer/ 是水电煤气总闸,配置、数据库连接、日志都在这里。

  - config/ 是项目级的配置文件目录。

  - app_celery/ 如果你加了 --celery 参数,这个目录就出现了。

这个脚手架还有个很实用的功能——给现有项目添加API:

# 进入项目根目录
uv run fastapi-scaff add user

它会自动生成对应API的CRUD代码骨架,连增删改查的路由都给你搭好了。

💡 最后一个忠告

这个脚手架就像一套趁手的螺丝刀,不是最贵的,但是开箱即用,尺寸正好。它极大地降低了我们从一个想法到一行代码之间的摩擦成本。

最后啰嗦一句,不要被脚手架限制死。当你项目复杂到一定程度,完全可以对它动刀,把默认的 SQLAlchemy 换成你喜欢的 Tortoise-ORM 或者 Peewee 。它的使命是帮你开个好头,而不是绑住你的手脚。

好了,今天就先聊到这儿。希望下次你再开新项目时,不再是愁眉苦脸地搭环境,而是泡杯咖啡,优雅地敲下 fastapi-scaff new  ,然后像个艺术家一样,开始雕琢你的代码。


👩‍💻 觉得这篇踩坑记录对你有帮助?

点个 「赞」和「关注」,让我知道你在看。

转发给你那个还在手动搭项目目录的倒霉蛋同事,救救他!

👇 评论区聊聊,你搭项目最烦哪一步?