跳到主要内容

第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

两者任选其一即可。

ORM 升级路线

2. 用 Pydantic 做数据校验​

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

Pydantic 数据校验

3. 补全 CRUD​

目前只实现了“查”。管理员需要对电影数据做增、删、改,因此要补齐:

  • POST:新增电影
  • PUT:修改电影
  • DELETE:删除电影

CRUD 接口

4. 用 APIRouter 做路由分组​

现在所有路由都挂在 app 上,路由一多就非常杂乱。使用 APIRouter 按业务拆分:

  • 用户相关 → users router
  • 电影相关 → movies router
  • 任务相关 → tasks router

代码结构会立刻清晰起来。

APIRouter 路由分组


三、第二阶段:安全性与用户系统​

电影网站需要收藏、点赞、个性化推荐,这些都依赖用户体系。

1. JWT 用户认证​

使用 JWT(JSON Web Tokens) 实现:

  • 用户注册与登录
  • 令牌签发
  • 令牌刷新:例如登录 1 小时后自动退出,刷新操作可将有效期再延后 1 小时

JWT 用户认证

2. 全局认证与权限控制​

  • 只有登录用户才能收藏电影;
  • 只有登录的管理员才能执行电影的增删改查。

3. 密码加密​

所有密码绝不能明文存储,必须加密后再入库。这既是对自己负责,也是对用户负责。

密码加密


四、第三阶段:推荐算法​

既然是电影推荐系统,核心就是“怎么推荐”。可以分三层递进:

1. 内容推荐(余弦相似度)​

根据电影标签计算相似度。例如标签是“科幻”,就推荐其他科幻电影;标签是“喜剧”,就推荐喜剧电影。

内容推荐

2. 协同过滤​

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

协同过滤

3. AI 语义推荐​

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

AI 语义推荐


五、第四阶段:前端工程化​

当前前端通过 CDN 引入,只适合小型项目。真实项目需要把前端独立出来。

1. 用 Vite 创建独立前端项目​

前端单独建项目、单独跑服务,通过跨域请求调用后端接口。构建工具使用 Vite。

Vite 前端工程

2. 前端路由管理​

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

前端路由管理

3. 引入组件库​

目前使用 Tailwind CSS,所有样式都要自己写。后期可换成成熟组件库:

  • Element Plus
  • Ant Design

组件直接复用、样式统一,能大幅提升开发效率。

前端组件库


六、第五阶段:部署与运维​

程序写好了,得让别人能访问,这就需要部署到云服务器。

部署与运维

1. 生产环境数据库​

把 SQLite 换成 MySQL 或 PostgreSQL。

2. 容器化部署​

使用 Docker 把项目打包进容器,方便部署,也便于后续的分布式部署。

3. Nginx 反向代理​

用 Nginx 处理静态文件、实现负载均衡,提升网络响应效率。

第五阶段:生产数据库、Docker 容器化与 Nginx 反向代理部署


七、小结​

把上面的路线整理成一张表:

阶段目标关键技术
一后端可维护SQLAlchemy / SQLModel、Pydantic、POST/PUT/DELETE、APIRouter
二安全与用户体系JWT 认证、令牌刷新、全局权限、密码加密
三智能推荐余弦相似度、协同过滤、AI 语义推荐
四前端工程化Vite、前端路由、Element Plus / Ant Design
五上线运维MySQL / PostgreSQL、Docker、Nginx

学习理念:先见森林,再见树木。

先用最快速度做出一个能跑的小玩具,建立成就感和全局认知;再在这个基础上一步步扩展,把每个阶段涉及的技术知识衔接到项目中。这样才能真正做到“从干中学”,既保持学习兴趣,又掌握完整的开发技巧。

如果这套 5 个阶段的进阶课程后续更新,我们会像 Django 全栈系列一样,带你把这个小项目一步步做成真实产品。我们后会有期!

课程推荐

想系统学习这门课程?

你已阅读完本文。需要更完整的知识体系,可以继续了解「FastAPI 项目实战」。

查看课程详情