一、项目背景

1.行业现状分析

  • 市场规模:数字音乐市场用户规模突破6亿,市场规模超500亿元,年增长率保持在15%以上

  • 竞争格局:QQ音乐、网易云音乐等头部平台占据主要市场,但用户增长放缓

  • 技术趋势:AI推荐、个性化定制、社交化成为行业发展的三大方向

  • 使用场景:用户日均听歌时长超过1.5小时,移动端占比超过70%

2.存在的问题痛点

序号 痛点 影响 解决方案
1 海量音乐资源难以筛选 用户选择困难,体验不佳 智能搜索 + AI推荐
2 传统推荐算法单一化 缺乏个性化,用户流失 多维度用户画像
3 歌单管理功能有限 组织音乐效率低下 智能歌单生成
4 社交互动不足 用户粘性低 歌单分享、社交推荐

3.项目目标与意义

  • 目标:构建集听歌、管理、智能推荐于一体的现代化音乐平台

  • 意义:提升用户音乐发现效率,提供个性化音乐体验,增强用户粘性


二、项目业务需求

功能模块架构

用户系统 歌曲管理 歌单管理 收藏管理 AI推荐
注册登录 浏览搜索 创建编辑 收藏歌曲 自然语言推荐
密码重置 在线播放 歌曲管理 收藏列表 歌词情感分析
权限管理 上传管理 收藏关联 批量管理 智能发现

三、业务流程(图形)

1.用户登录流程

请添加图片描述

2.核心业务流程

请添加图片描述

3.总结

请添加图片描述


四、项目加购

1.系统架构图

在这里插入图片描述

2.项目目录结构

project1/
├── backend/                          # 后端服务
│   ├── app/                          # 核心应用
│   │   ├── main.py                   # FastAPI 入口
│   │   ├── models/                   # 数据模型
│   │   ├── routers/                  # API 路由
│   │   ├── services/                 # 业务逻辑
│   │   ├── schemas/                  # 数据校验
│   │   └── utils/                    # 工具类
│   ├── uploads/                      # 文件存储
│   ├── .env                          # 环境变量
│   ├── requirements.txt              # 依赖包
│   └── init_db.py                    # 数据库初始化
└── frontend/                         # 前端页面
    ├── 各html页面                   # 页面文件
    ├── css/                          # 样式文件
    └── js/                           # 脚本文件

五、项目技术栈

1.后端技术栈

技术 版本 用途 优势
FastAPI 0.104.1 Web框架 异步高性能、自动API文档、类型提示
SQLAlchemy 2.0.23 ORM框架 Python SQL工具包,支持多种数据库
python-jose 3.3.0 JWT认证 生成和验证JWT Token
Passlib 1.7.4 密码加密 支持多种哈希算法
bcrypt 4.0.1 哈希算法 自适应哈希函数,抗攻击
Uvicorn 0.24.0 ASGI服务器 快速的ASGI服务器
python-multipart 0.0.6 文件上传 支持multipart/form-data
requests 2.31.0 HTTP客户端 调用外部API

2.前端技术栈

技术 用途 特点
HTML5 页面结构 语义化标签,SEO友好
CSS3 样式设计 响应式布局,动画效果
JavaScript (ES6+) 交互逻辑 现代JS特性,异步编程
Axios HTTP请求库 Promise-based,拦截器支持

3.AI集成方案

  • Dify平台:低代码AI应用开发平台,可视化编排工作流

  • 工作流模式:自然语言理解 → 音乐检索 → 推荐生成

  • 功能支持:音乐推荐、歌词分析、智能发现


六、数据库设计

实体关系图

请添加图片描述


七、项目演示

1. 登录与注册页面

请添加图片描述请添加图片描述

: 用户如果忘记密码,可以点击下方的忘记密码选择通过邮箱进行重置密码

2.首页

请添加图片描述

1.用户登录成功后第一个映入眼帘的就是我们的首页
2.最上方的是我们的探索功能,点击后可以直接跳转到我们的AI推荐页面
3.中间的是本网站的四大特点,以及最下方的歌曲在本网站都是可以播放的,通过漂亮的封面来吸引用户

3.歌曲页面

请添加图片描述
请添加图片描述

本网站蕴含了海量歌曲,为提升用户体验,我还在网页的上方添加了搜索框,输入关键字即可找到用户想听的歌曲

请添加图片描述

如果用户想要了解歌曲的具体信息,比如:歌手、专辑、歌词等,还可以点击歌曲,那么页面就会给我们弹出一个详情框,这些内容在这里面都可以找的到
请添加图片描述

请添加图片描述

同时,如果你点击了播放歌曲,那么在页面的最下方还会出现一个播放栏,在这个播放栏上我们可以进行调整歌曲进度和音量大小的操作,如果用户点击最左方的歌曲封面,还会弹出一个全屏播放器,同时,在这个地方也可以查询到歌曲本身的信息。

请添加图片描述

基于对网站的管理,在开发之初,我对网站设立了两种用户状态,一种是管理员,还有一种是普通用户,目前所展示的则是管理员的添加歌曲功能,管理员可以对曲库进行添加和删除歌曲

4.歌单页面

请添加图片描述

当然,歌单功能也是具备搜索,创建和删除的功能的,这个并不需要管理员权限,是向所有用户都开放的。

请添加图片描述

用户点击歌单之后,会弹出歌单的详细数据,里面可以进行歌曲的添加和删除本歌单的功能(删除歌单不会删除歌单本身),添加歌曲的功能也是可以进行搜索的(一切都是为了提升用户体验)

注: 歌曲详情页里面也是可以将歌曲添加到歌单的。

5.收藏页面

请添加图片描述

用户在歌曲页面点击歌曲右面的爱心即可把歌曲收藏到本页面,再次点击就是取消收藏,同时收藏页面将不会显示本歌曲

请添加图片描述

6.AI推荐页面

请添加图片描述

最后则是我们的AI页面,如果用户不知道听什么歌,那么就可以来到本页面,向AI询问,以便找到适合自己的歌曲。当然,如果你不知道怎么问,在页面的左下方还会有提示词给你使用,进一步的优化了用户体验。


八、核心模块的技术讲解

1. 用户认证模块 - JWT无状态认证

认证流程

用户登录请求  
    ↓  
验证用户名和密码  
    ↓  
生成JWT Token(Header + Payload + Signature)  
    ↓  
返回Token给前端  
    ↓  
前端存储Token(localStorage)  
    ↓  
后续请求携带Token(Authorization: Bearer <token>)  
    ↓  
后端验证Token有效性  
    ↓  
提取用户信息执行业务逻辑

核心代码

def create_access_token(data: dict):  
    expire = datetime.utcnow() + timedelta(minutes=30)  
    to_encode = {"exp": expire, **data}  
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)  
    return encoded_jwt  
​  
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")def verify_password(plain_password, hashed_password):  
    return pwd_context.verify(plain_password, hashed_password)

技术要点

  • ✅ 使用HS256算法签名Token

  • ✅ Token有效期30分钟

  • ✅ 密码使用bcrypt自适应哈希

  • ✅ 无状态认证,易于水平扩展

2. 歌单管理模块 - 多对多关系设计

数据库模型

playlist_song = Table(  
    "playlist_song",  
    Base.metadata,  
    Column("playlist_id", Integer, ForeignKey("playlists.id"), primary_key=True),  
    Column("song_id", Integer, ForeignKey("songs.id"), primary_key=True)  
)class Playlist(Base):  
    __tablename__ = "playlists"  
    id = Column(Integer, primary_key=True)  
    name = Column(String(100), nullable=False)  
    user_id = Column(Integer, ForeignKey("users.id"))  
    songs = relationship("Song", secondary=playlist_song, back_populates="playlists")

核心业务逻辑

def add_song_to_playlist(db, playlist_id, song_id, user_id):  
    playlist = get_playlist(db, playlist_id)  
    if playlist.user_id != user_id:  
        raise PermissionError("无权操作此歌单")  
    song = get_song(db, song_id)  
    if song not in playlist.songs:  
        playlist.songs.append(song)  
        db.commit()  
    return playlist

技术要点

  • ✅ SQLAlchemy声明式多对多关系

  • ✅ 歌单所有权验证

  • ✅ 重复添加检测

  • ✅ 事务管理确保数据一致性

3. AI推荐模块 - Dify工作流集成

AI调用流程

用户输入自然语言请求  
    ↓  
前端发送POST请求到 /api/ai/recommend  
    ↓  
后端封装请求参数  
    ↓  
调用Dify API (HTTP POST)  
    ↓  
Dify执行工作流:  
    1. 理解用户意图  
    2. 查询音乐数据库  
    3. 调用大语言模型生成推荐  
    4. 格式化返回结果  
    ↓  
后端接收响应并解析  
    ↓  
返回格式化结果给前端  
    ↓  
前端展示推荐歌曲列表

核心代码

def call_dify_workflow(input_data):  
    headers = {"Authorization": f"Bearer {DIFY_API_KEY}"}  
    data = {  
        "inputs": {"query": input_data},  
        "response_mode": "blocking",  
        "user": "music_user"  
    }  
    response = requests.post(url, headers=headers, json=data, timeout=300)  
    return response.json()

技术要点

  • ✅ 多输入格式兼容

  • ✅ 多重重试机制

  • ✅ 超时控制(300秒)

  • ✅ 优雅降级处理

九、项目总结展望

1.项目成果

  • 用户认证系统:注册、登录、密码重置、权限管理

  • 歌曲管理系统:浏览、搜索、播放、上传

  • 歌单管理系统:创建、编辑、歌曲管理

  • 收藏功能:收藏/取消收藏、收藏列表

  • AI推荐功能:自然语言推荐、歌词分析

2.技术亮点

  • 现代异步框架:FastAPI高性能后端

  • JWT无状态认证:安全高效的身份验证

  • MVC分层架构:清晰的代码组织结构

  • ORM数据操作:SQLAlchemy数据库抽象

  • AI智能集成:Dify平台快速接入

  • 自动API文档:Swagger UI自动生成

3.项目数据统计

  • 后端代码:20+个Python模块,约1500行代码

  • 前端页面:6个HTML页面,约800行JavaScript代码

  • API接口:20+个RESTful接口

  • 数据库表:5张核心数据表

4.未来规划

  1. 性能优化:引入Redis缓存热门数据,优化数据库查询

  2. 功能扩展:添加社交分享、评论评分系统

  3. AI增强:用户行为分析优化推荐算法

  4. 技术升级:Docker容器化部署、移动端APP开发

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐