🎬 电影推荐系统项目概述
1. 项目简介
本项目是一个基于 Flask (后端) 和 Vue 3 (前端) 的全栈电影推荐系统。系统深度整合了 TMDB (The Movie Database) 的海量电影数据,旨在为用户提供一个个性化、交互丰富的电影探索平台,并实现智能推荐功能。
核心功能
- 用户系统: 安全的注册、登录体验,支持 JWT 认证和个人资料管理。
- 电影内容: 提供热门电影、高分电影的浏览,支持无限滚动加载。
- 智能搜索: 快速实时搜索电影、演员或导演,精准定位内容。
- 电影详情: 呈现电影的详细信息,包括海报、简介、演职员、预算等,提供一站式观影参考。
- 用户互动: 允许用户对电影进行评分 (0-10分)、撰写评论,并将其添加到个人收藏夹。
- 智能推荐 :
- 协同过滤: 根据相似用户的行为模式推荐电影。
- 内容推荐: 基于用户偏好的电影类型和标签进行推荐。
- 冷启动机制: 为新用户或评分数据不足的用户提供高质量的默认推荐。
2. 技术架构
后端 (movie-backend)
- 框架: Flask
- 数据库 ORM: SQLAlchemy
- 数据库: MySQL
- 认证: Flask-JWT-Extended
- 跨域处理: Flask-CORS
- 外部数据 : TMDB API (通过
requests库调用)
前端 (movie-frontend)
- 框架: Vue 3 (Composition API)
- 构建工具: Vite
- UI 组件库: Element Plus
- 状态管理: Pinia
- 路由: Vue Router
- HTTP 客户端: Axios (封装了拦截器处理 Token)
- 样式: CSS3 (Flexbox/Grid), FontAwesome 图标
3. 环境配置与安装
前置要求
- Python 3.8+
- Node.js 16+
- MySQL 5.7+
3.1 数据库配置
- 创建数据库
movie_recommendation。 - 配置后端项目的数据库连接字符串。
3.2 后端启动
- 进入后端目录,安装 Python 依赖。
- 运行后端服务启动命令。
服务将运行在http://localhost:5000
3.3 前端启动
- 进入前端目录,安装 Node.js 依赖。
- 启动前端开发服务器。
访问http://localhost:3000
4. 核心功能实现概述
4.1 数据库模型设计
本项目设计了 User (用户), Movie (电影, 作为TMDB数据的本地缓存), Rating (评分与评论), Favorite (收藏) 四个核心数据库模型。它们之间通过外键关联,支持用户的多种交互行为,并为推荐算法提供数据基础。特别地,Movie 表作为本地缓存,仅存储用户产生过交互的或因推荐算法需要而加载的电影数据,避免了全量同步TMDB庞大数据的资源消耗。
4.2 用户认证模块
- 注册: 接收用户提交的基础信息,验证唯一性,密码经过安全哈希处理后存储。成功注册后,系统会颁发一个用于身份验证的 JWT Token。
- 登录: 用户提供凭据后,系统会进行身份验证并检查密码的正确性。验证成功则颁发新的 JWT Token。
- 身份验证与信息获取: 所有需要用户身份的操作都受 JWT Token 保护,系统会解析 Token 以获取当前用户信息。
4.3 TMDB 数据服务
封装了与 TMDB 官方 API 的所有交互逻辑,负责处理外部数据请求、认证和响应解析,确保后端服务能高效、稳定地获取电影信息。
4.4 电影管理与收藏
- 电影数据获取: 直接通过 TMDB 服务获取热门、高分、搜索等电影列表数据。
- 数据本地化: 在用户对电影进行收藏或评分等操作时,将相关的 TMDB 电影数据同步并存储到本地数据库,以便建立用户行为关联。
- 收藏功能: 用户可以将喜欢的电影添加入收藏夹,系统记录用户与电影的收藏关系,并提供查询用户收藏列表的接口。
4.5 评分与评论管理
- 提交评分与评论: 用户可对电影提交 0-10 分的评分并附带评论。系统会根据电影是否已存在本地进行处理(若不存在则先同步),并支持更新已有的评分。
- 获取用户评分: 用户可查看自己发布过的所有评分与评论历史。
- 获取电影评论: 支持查看某部电影下的所有用户评论,促进社区互动。
4.6 智能推荐算法
本系统采用混合推荐策略,旨在为用户提供精准的个性化电影推荐。
- 冷启动策略: 对于新用户或数据不足的用户,系统会推荐全局热门和高分电影。
- 用户画像构建: 综合分析用户历史评分数据,建立用户兴趣模型。
- 协同过滤 (User-Based Collaborative Filtering) :
- 通过计算用户之间的相似度(例如使用皮尔逊相关系数),找出与当前用户兴趣相近的"邻居"用户。
- 根据这些相似邻居用户的高分电影,排除当前用户已看过的电影,推荐其可能感兴趣的新电影。
- 内容推荐 (Content-Based Filtering) :
- 分析用户高分电影的类型、标签等特征,构建用户兴趣偏好。
- 推荐与用户偏好特征相似的电影。
- 混合与兜底: 推荐系统综合协同过滤和内容推荐的结果,并通过完善的兜底策略(如补充热门电影)确保在任何情况下都能提供充足的推荐列表。
4.7 电影搜索功能
- 实时搜索: 前端用户输入关键词时,实时向后端发送请求。
- TMDB 转发: 后端将搜索请求安全地转发至 TMDB API。
- 结果展示: 将 TMDB 返回的搜索结果以直观的电影列表形式展示给用户。
5. 页面功能展示
7.1 首页 (Home Page)
首页是用户进入系统的第一站。顶部设有醒目的 Hero 区域,包含动态背景和快速搜索框,方便用户直接查找电影。
下方主要包含三个核心板块:
- 为你推荐: 基于个性化算法为登录用户生成的电影列表。
- 热门电影: 展示当前 TMDB 上最受欢迎的电影。
- 高分佳作 : 展示历史评价最高的经典电影。
页面采用响应式网格布局,并支持无限滚动加载,提供流畅的浏览体验。



7.2 电影详情页 (Movie Detail Page)
详情页通过大幅背景图营造沉浸式体验。左侧展示电影海报,右侧包含详细的元数据(评分、类型、上映日期、时长、预算票房等)和剧情简介。
用户在此页面可以执行关键交互操作:
- 收藏: 点击心形按钮将电影加入收藏夹。
- 评分 : 点击星形按钮唤起评分对话框。
页面底部展示了其他用户的评论列表,促进社区交流。

7.3 评分与评论对话框
这是一个模态对话框组件,用户可以滑动选择 0-10 分的评分,并填写具体的文字评论。支持实时预览评分等级。

7.4 个人中心 (Profile Page)
个人中心是用户的私人空间。
- 左侧/顶部: 展示用户头像、基本信息以及统计数据(累计评分数、收藏数)。
- 右侧/下方 : 以列表形式展示用户的评分历史 。用户可以查看自己评过的电影,并支持修改评分 或删除评分。

7.5 用户认证 (Login & Register)
提供简洁美观的卡片式登录和注册界面。前端实现了表单验证,确保数据的合法性。登录成功后自动跳转并持久化存储 Token。


7.6 搜索结果页 (Search Page)
当用户在搜索框输入关键词后,系统会跳转到此页面。
- 功能: 支持对电影名称的模糊搜索。
- 展示: 搜索结果以网格形式展示,与首页保持一致的视觉风格。
- 分页: 支持底部分页加载更多结果。
- 空状态: 当没有找到匹配电影时,会展示友好的提示信息。
