基于 Flask 与Vue 3 及协同过滤算法的智能电影推荐系统

🎬 电影推荐系统项目概述

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 数据库配置

  1. 创建数据库 movie_recommendation
  2. 配置后端项目的数据库连接字符串。

3.2 后端启动

  1. 进入后端目录,安装 Python 依赖。
  2. 运行后端服务启动命令。
    服务将运行在 http://localhost:5000

3.3 前端启动

  1. 进入前端目录,安装 Node.js 依赖。
  2. 启动前端开发服务器。
    访问 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)

当用户在搜索框输入关键词后,系统会跳转到此页面。

  • 功能: 支持对电影名称的模糊搜索。
  • 展示: 搜索结果以网格形式展示,与首页保持一致的视觉风格。
  • 分页: 支持底部分页加载更多结果。
  • 空状态: 当没有找到匹配电影时,会展示友好的提示信息。
相关推荐
天天向上10242 小时前
el-table 解决一渲染数据页面就卡死
前端·javascript·vue.js
子午2 小时前
【2026原创】鱼类识别系统~Python+深度学习+CNN卷积神经网络算法+模型训练+图像识别
图像处理·python·深度学习·cnn
地理探险家2 小时前
【YOLOv8实战】15组衣物类深度学习数据集分享|附加载+标签管理代码
人工智能·python·深度学习·yolo·模型训练·电商视觉
大学生毕业题目2 小时前
毕业项目推荐:103-基于yolov8/yolov5/yolo11的皮肤癌检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·皮肤癌检测
Code知行合壹2 小时前
Vue3入门
前端·javascript·vue.js
ai_top_trends2 小时前
AI 生成 PPT 哪个好用?2026 年主流工具实测对比
人工智能·python
于初见月2 小时前
Conda环境中的pip究竟指向哪里?
python·conda·pip
资深流水灯工程师2 小时前
基于Python的Qt开发之Pyside6 QtSerialPort库的使用
python·qt
木头左2 小时前
HMM隐马尔可夫模型在指数期权双币种套利策略
python