第6节:从“玩具项目”到真实产品的完整升级路线
到第 6 天,我们的电影推荐网站已经能跑起来了:FastAPI 提供接口,前端页面能展示电影列表。但必须清醒地认识到——它目前只是一个“小玩具”,距离真实可用的产品还有相当长的路。
这篇文章不写新代码,而是给你一张全栈升级路线图:从后端优化、用户系统、推荐算法、前端工程化到部署运维,一共 5 个阶段。每个阶段要解决什么问题、用到什么技术,一次讲清楚。
一、当前项目的现状与问题
打开 main.py,你会发现所有逻辑都堆在一个文件里:
- 所有 SQL 语句直接写死在接口函数中;
- 所有路由都用
app.get/app.post直接挂在app上; - 只有“获取电影列表”这一个 CRUD 操作;
- 前端通过 CDN 引入,没有独立工程;
- 数据库使用 SQLite,仅适合本地开发。
项目一旦变大,这种结构会非常难维护。下面按阶段拆解升级路径。
二、第一阶段:后端优化
1. 用 ORM 告别手写 SQL
当前 SQL 语句全部写在 main.py 中,项目变大后难以维护。解决方案是引入 ORM(对象关系映射),把 SQL 操作转化为面向对象的方式,像操作 Python 对象一样操作数据库。
可选的开源 ORM:
- SQLAlchemy
- SQLModel
两者任选其一即可。

2. 用 Pydantic 做数据校验
对接口的入参、出参进行数据验证,使用 Pydantic 完成校验,保证数据格式合法。

3. 补全 CRUD
目前只实现了“查”。管理员需要对电影数据做增、删、改,因此要补齐:
POST:新增电影PUT:修改电影DELETE:删除电影

4. 用 APIRouter 做路由分组
现在所有路由都挂在 app 上,路由一多就非常杂乱。使用 APIRouter 按业务拆分:
- 用户相关 →
usersrouter - 电影相关 →
moviesrouter - 任务相关 →
tasksrouter
代码结构会立刻清晰起来。

三、第二阶段:安全性与用户系统
电影网站需要收藏、点赞、个性化推荐,这些都依赖用户体系。
1. JWT 用户认证
使用 JWT(JSON Web Tokens) 实现:
- 用户注册与登录
- 令牌签发
- 令牌刷新:例如登录 1 小时后自动退出,刷新操作可将有效期再延后 1 小时

2. 全局认证与权限控制
- 只有登录用户才能收藏电影;
- 只有登录的管理员才能执行电影的增删改查。
3. 密码加密
所有密码绝不能明文存储,必须加密后再入库。这既是对自己负责,也是对用户负责。

四、第三阶段:推荐算法
既然是电影推荐系统,核心就是“怎么推荐”。可以分三层递进:
1. 内容推荐(余弦相似度)
根据电影标签计算相似度。例如标签是“科幻”,就推荐其他科幻电影;标签是“喜剧”,就推荐喜剧电影。

2. 协同过滤
利用用户的收藏、评分数据,找到行为相似的用户群体进行推荐。抖音的推荐系统就使用了协同过滤。

3. AI 语义推荐
不再依赖关键词匹配,而是按语义匹配。例如电影描述中没有出现“外星人”三个字,但内容体现的是对外星世界的探索,语义模型也能把它识别为相似推荐。

五、第四阶段:前端工程化
当前前端通过 CDN 引入,只适合小型项目。真实项目需要把前端独立出来。
1. 用 Vite 创建独立前端项目
前端单独建项目、单独跑服务,通过跨域请求调用后端接口。构建工具使用 Vite。

2. 前端路由管理
访问不同 URL 时,匹配到对应页面,再请求后端不同 API 获取或操作数据。

3. 引入组件库
目前使用 Tailwind CSS,所有样式都要自己写。后期可换成成熟组件库:
- Element Plus
- Ant Design
组件直接复用、样式统一,能大幅提升开发效率。

六、第五阶段:部署与运维
程序写好了,得让别人能访问,这就需要部署到云服务器。

1. 生产环境数据库
把 SQLite 换成 MySQL 或 PostgreSQL。
2. 容器化部署
使用 Docker 把项目打包进容器,方便部署,也便于后续的分布式部署。
3. Nginx 反向代理
用 Nginx 处理静态文件、实现负载均衡,提升网络响应效率。

七、小结
把上面的路线整理成一张表:
| 阶段 | 目标 | 关键技术 |
|---|---|---|
| 一 | 后端可维护 | SQLAlchemy / SQLModel、Pydantic、POST/PUT/DELETE、APIRouter |
| 二 | 安全与用户体系 | JWT 认证、令牌刷新、全局权限、密码加密 |
| 三 | 智能推荐 | 余弦相似度、协同过滤、AI 语义推荐 |
| 四 | 前端工程化 | Vite、前端路由、Element Plus / Ant Design |
| 五 | 上线运维 | MySQL / PostgreSQL、Docker、Nginx |
学习理念:先见森林,再见树木。
先用最快速度做出一个能跑的小玩具,建立成就感和全局认知;再在这个基础上一步步扩展,把每个阶段涉及的技术知识衔接到项目中。这样才能真正做到“从干中学”,既保持学习兴趣,又掌握完整的开发技巧。
如果这套 5 个阶段的进阶课程后续更新,我们会像 Django 全栈系列一样,带你把这个小项目一步步做成真实产品。我们后会有期!
想系统学习这门课程?
你已阅读完本文。需要更完整的知识体系,可以继续了解「FastAPI 项目实战」。
查看课程详情