从用户登录到 AI 辅助记账,用 FastAPI 逐步开发一个可以管理自己收支的异步 API 应用。
本课程以个人账单管理工作台为项目,围绕异步数据库、认证权限、关联查询、统计、后台任务和实时通知展开。每节结合一个具体需求,引入新的技术点,完成实现后在页面中操作并核对结果。
课程将按章节更新,大纲会结合实际带敲与联调情况调整,具体安排以站内更新为准。
项目预览

前端 Mock 演示页面,课程中将逐步接入真实后端接口。
做一个管理自己账单的工作台
午饭花了多少钱、这个月有哪些收入、餐饮支出占了多少,不必只停留在表格里。我们将从用户注册和登录开始,逐步接通一套个人账单管理页面:新增收支、设置分类和标签,按日期筛选,查看收入、支出、结余与分类统计。
再加入一个 AI 录入入口。例如输入“昨天午饭花了 28 元”,模型将文本整理为金额、日期、分类和备注候选;缺少信息时提示补齐,由用户核对并确认后才入账。模型负责理解文本,业务代码负责校验、权限和实际保存。

项目中的每个账号只管理自己的账单。管理员可以维护用户,但不会因为管理员身份就默认获得所有人的私人收支数据。
从会写 CRUD,走向异步应用开发
异步执行与资源管理
理解 def 与 async def 的执行差异,识别会阻塞请求的调用。通过 lifespan 管理应用级资源,区分数据库引擎、连接池、会话和事务,为请求与后台任务创建独立会话。
认证、权限与文件接口
实现密码哈希、JWT 登录、当前用户与管理员依赖,处理资料修改、密码修改后的登录失效,以及头像上传、校验和旧文件清理。
关联查询与收支统计
从单笔账单开始,逐步实现分类联查、组合筛选、多标签关联、显式关系加载、去重分页和聚合统计。结合实际数据解释 JOIN 与关系加载的区别,避免多对多查询产生重复记录或重复累计金额。
异步 AI 调用与结构化校验
通过 LangChain 统一接入模型,使用异步调用和结构化输出提取账单,复用模型客户端并设置超时和并发限制,用 Pydantic 校验提取结果。切换模型时核对结构化输出能力和提取效果。区分允许缺项的候选模型与必须完整合法的账单模型,不把格式正确直接当成可以入账。
后台任务与可靠确认
先让页面查询后台处理状态,再通过 WebSocket 接收完成通知。处理失败、重启中断和重复提交;确认入账时使用事务、状态条件与唯一约束,避免同一候选重复确认产生多笔账单。
定时维护与问题定位
通过定时任务清理过期候选,保留已入账数据。结合请求日志、异常反馈和数据库记录,观察处理过程,理解进程内后台任务的适用边界。
后端从零带敲,React 页面直接提供
课程提供带 Mock 数据的 React 工作台,可以先运行页面,体验登录、记账、统计和 AI 录入,再逐步替换成自己实现的真实接口。
FastAPI 后端从空工程逐步编写,React 页面和样式不带敲。 课堂重点是接口输入输出、身份凭据、数据库操作与前后端联调。还未实现的操作不会用 Mock 成功提示冒充真实结果。
知识点按照实际开发顺序引入:先完成手动记账和统计,再接 AI;先获得候选结果,再加入后台处理、确认入账和通知。已有实现随课复用,简单内容合并,复杂内容保留足够的解释与操作时间。
学习路线
| 阶段 | 学习重点 | 阶段成果 |
|---|---|---|
| 异步基础与用户中心 | 工程、异步数据库、迁移、注册登录、依赖权限、个人资料与头像 | 接通可以真实注册登录的用户中心 |
| 账单管理与关联数据 | 用户管理、分类标签、精确金额、账单 CRUD、联表、多对多和统计 | 手动管理自己的收支,并核对统计结果 |
| AI 辅助录入 | 异步调用、结构化校验、缺项处理与后台状态 | 一句话生成可核对的账单候选 |
| 确认入账与实时反馈 | 事务、幂等、失败处理、WebSocket 和定时清理 | 确认后保存账单,查询处理结果并接收通知 |
技术栈
| 技术 | 在项目中的用途 |
|---|---|
| FastAPI + Pydantic | 接口、参数校验、响应模型、依赖注入与权限 |
| PostgreSQL + SQLAlchemy 2.x + asyncpg | 异步数据访问、关联查询、事务和收支统计 |
| Alembic | 随功能演进维护数据库迁移 |
| LangChain + 模型供应商集成包 | 统一模型接入、异步调用与结构化账单提取;控制超时与并发 |
| BackgroundTasks + APScheduler | 进程内后台处理与周期清理 |
| WebSocket | 向当前用户推送任务完成或失败通知 |
| React + TypeScript + Vite | 构建和运行带 Mock 数据的工作台,逐步接入真实后端 |
| Ant Design | 表单、表格、弹窗、分页及上传等交互组件 |
| Axios | 统一封装 HTTP 请求、携带登录凭据、处理响应与错误 |
| React Router + Zustand | 页面路由、登录会话与偏好状态管理 |
适合谁学习
- 学过 FastAPI 基础接口和简单 CRUD,希望继续学习异步开发的同学。
- 有 Python 基础,希望通过一个连续项目理解认证、数据库关系、事务与后台任务的开发者。
- 想把 AI 能力接入已有业务,并理解模型结果如何经过校验再保存的学习者。
需要了解 Python 函数、类、模块、异常、HTTP 接口和基础数据库操作。没有 FastAPI 基础,可以先学习站内免费入门课程;React 无需提前掌握。
项目主线在本机运行。AI 章节通过模型 API 调用,需要自备对应账号和 API Key,调用费用由模型服务商计费,不要求本地显卡。
学完能收获什么
你将完成一套包含用户体系、个人收支、分类标签、统计与 AI 辅助录入的后端应用,并在 React 页面中演示整个操作过程。
更重要的是,能够解释:为什么异步会话不能随意共享、怎样控制关联查询和事务边界、模型等待期间为什么不应占用长事务、重复确认怎样返回同一笔账单,以及页面断开后怎样重新查询真实结果。
这些实现可以作为后续个人工具、管理后台和 AI 应用的开发基础。项目部署、多进程运行和异步接口排错预留为加餐,在主线完成后再安排。