大数据毕业设计:Python在线音乐播放网站 音乐推荐系统(附源码)✅

185 篇文章 38 订阅
179 篇文章 6 订阅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
Python语言、Django框架、MySQL数据库、HTML、bootstrap+css+js

Django在线音乐播放网站是一个基于Django框架开发的音乐播放网站。它通过集成音乐库、用户管理、播放器和社交功能,提供用户在线收听音乐的服务。

2、项目界面

(1)系统首页

在这里插入图片描述

(2)热门歌手、热门歌曲

在这里插入图片描述

(3)全部歌手

在这里插入图片描述

(4)歌曲搜索

在这里插入图片描述

(5)热门歌曲排行榜

在这里插入图片描述

(6)后台数据管理

在这里插入图片描述

3、项目说明

Django在线音乐播放网站是一个基于Django框架开发的音乐播放网站。它通过集成音乐库、用户管理、播放器和社交功能,提供用户在线收听音乐的服务。

该网站的特点包括:

  1. 音乐库:网站集成了大量的音乐资源,用户可以通过搜索或浏览不同的音乐类型来发现和收听自己喜欢的音乐。

  2. 用户管理:用户可以注册账号并登录,保存自己喜欢的音乐到个人收藏夹中,并与其他用户分享音乐。

  3. 播放器:网站配备了功能强大的音乐播放器,支持播放、暂停、调整音量、切换歌曲等操作。同时,用户还可以创建自己的播放列表,根据自己的喜好定制音乐播放顺序。

  4. 社交功能:用户可以关注其他用户,查看其收藏的音乐和播放列表。此外,用户可以评论和点赞其他用户分享的音乐,与其他音乐爱好者进行互动。

总之,Django在线音乐播放网站提供了一个方便、全面的平台,让用户能够在线收听音乐、发现新音乐、管理个人音乐收藏,并与其他音乐爱好者进行交流互动。

4、核心代码


# _*_ coding: utf-8 _*_
from . import home
from app import db
from app.home.forms import LoginForm, RegisterForm, SuggetionForm
from app.models import User, Artist, Song, Collect
from flask import render_template, url_for, redirect, flash, session, request, jsonify
from functools import wraps
import time
import os

base = os.path.dirname(__file__)
song_path = base + '/../static/song/'
img_path = base + '/../static/artist/'


def admin_login(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if session['username'] != 'admin':
            return redirect(url_for("home.index"))
        return f(*args, **kwargs)

    return decorated_function


def user_login(f):
    """
    登录装饰器
    """

    @wraps(f)
    def decorated_function(*args, **kwargs):
        if "user_id" not in session:
            return "<script>alert('请先登录');history.go(-1)</script>"
        return f(*args, **kwargs)

    return decorated_function


@home.route("/contentFrame")
def contentFrame():
    """
    主页面
    """
    hot_artist = Artist.query.filter_by(isHot=1).limit(12).all()  # 获取歌手数据
    hot_song = Song.query.order_by(Song.hits.desc()).limit(10).all()  # 获取歌曲数据
    return render_template('home/contentFrame.html', hot_artist=hot_artist, hot_song=hot_song)  # 渲染模板


@home.route("/")
def index():
    """
    首页
    """
    return render_template('home/index.html')  # 渲染模板


@home.route("/login/", methods=["GET", "POST"])
def login():
    """
    登录
    """
    if request.method == 'POST':
        username = request.form.get("username")
        pwd = request.form.get("pwd")
        user = User.query.filter_by(username=username).first()  # 获取用户信息
        res = {}
        # 检测用户名
        if not user:
            res['status'] = -1
            res['message'] = '用户名不存在'
            return jsonify(res)
        # 检测密码
        if not user.check_pwd(pwd):  # 调用check_pwd()方法,检测用户名密码是否匹配
            res['status'] = -2
            res['message'] = '用户名和密码不匹配'
            return jsonify(res)
        # 用户名和密码正确,写入session
        session["user_id"] = user.id  # 将user_id写入session, 后面用户判断用户是否登录
        session["username"] = user.username  # 将user_id写入session, 后面用户判断用户是否登录
        res['status'] = 1
        res['message'] = '登录成功'
        return jsonify(res)
    return render_template("home/login.html")


@home.route("/register/", methods=["GET", "POST"])
def register():
    """
    注册功能
    """
    if request.method == "POST":  # 提交注册表单
        username = request.form.get("username")
        pwd = request.form.get("pwd")
        # 判断用户名是否存在
        user = User.query.filter_by(username=username).first()  # 获取用户信息
        if user:
            res = {}
            res['status'] = -2
            res['message'] = '该用户已存在'
            return jsonify(res)
        # 写入到user表
        try:
            # 为User类属性赋值
            user = User(
                username=username,  # 用户名
                pwd=pwd,  # 对密码加密
            )
            db.session.add(user)  # 添加数据
            db.session.commit()  # 提交数据
            res = {}
            res['status'] = 1
            res['message'] = '注册成功'
        except:
            res = {}
            res['status'] = -1
            res['message'] = '注册失败'
        return jsonify(res)
    return render_template("home/register.html")


@home.route("/logout/")
def logout():
    """
    退出登录
    """
    # 重定向到home模块下的登录。
    session.pop("user_id", None)
    session.pop("username", None)
    return redirect(url_for('home.index'))


@home.route("/artist/<int:id>")
def artist(id=None):
    """
    歌手页
    """
    song = Song.query.join(Artist, Song.singer == Artist.artistName).filter(Artist.id == id).all()
    hot_artist = Artist.query.limit(6).all()
    return render_template('home/artist.html', song=song, hot_artist=hot_artist)  # 渲染模板


@home.route("/play_song")
def playSong():
    """
    获取播放路径
    """
    song_id = request.args.get("id", "")  # 接收传递的参数歌曲ID
    song = Song.query.filter_by(id=int(song_id)).first()
    res = {}
    res['status'] = 1
    res['path'] = song.fileURL
    return jsonify(res)


@home.route("/toplist")
def toplist():
    top_song = Song.query.order_by(Song.hits.desc()).limit(30).all()
    hot_artist = Artist.query.limit(6).all()
    return render_template('home/toplist.html', top_song=top_song, hot_artist=hot_artist)  # 渲染模板


@home.route('/style_list')
def styleList():
    """
    曲风
    """
    type = request.args.get('type', 0, type=int)
    page = request.args.get('page', type=int)  # 获取page参数值
    if type:
        page_data = Song.query.filter_by(style=type).order_by(Song.hits.desc()).paginate(page=page, per_page=10)
    else:
        page_data = Song.query.order_by(Song.hits.desc()).paginate(page=page, per_page=10)
    return render_template('home/styleList.html', page_data=page_data, type=type)  # 渲染模板


@home.route('/artist_list')
def artistList():
    '''
    歌手列表
    '''
    type = request.args.get('type', 0, type=int)
    page = request.args.get('page', type=int)  # 获取page参数值
    if type:
        page_data = Artist.query.filter_by(style=type).paginate(page=page, per_page=10)
    else:
        page_data = Artist.query.paginate(page=page, per_page=10)
    return render_template('home/artistList.html', page_data=page_data, type=type)  # 渲染模板


# 发现音乐
@home.route('/search')
def search():
    keyword = request.args.get('keyword')  # 获取关键字
    page = request.args.get('page', type=int)  # 获取page参数值
    if keyword:
        keyword = keyword.strip()
        page_data = Song.query.filter(Song.songName.like('%' + keyword + '%')).order_by(Song.hits.desc()).paginate(
            page=page, per_page=10)
    else:
        page_data = Song.query.order_by(Song.hits.desc()).paginate(page=page, per_page=10)
    return render_template('home/search.html', keyword=keyword, page_data=page_data)


@home.route('/modify_password', methods=['GET', 'POST'])
def modifyPassword():
    if request.method == 'POST':
        old_pwd = request.form.get("old_pwd")
        new_pwd = request.form.get("new_pwd")
        # 检查原始密码是否正确
        user = User.query.filter_by(id=session['user_id']).first()  # 获取用户信息
        res = {}
        if not user.check_pwd(old_pwd):
            res['status'] = -1
            res['message'] = '原始密码错误'
            return jsonify(res)
        # 更改密码
        try:
            user.pwd = new_pwd  # 对新密码加密
            db.session.add(user)
            db.session.commit()
            res['status'] = 1
            res['message'] = '密码修改成功'
            return jsonify(res)
        except:
            res['status'] = -2
            res['message'] = '密码修改错误'
            return jsonify(res)
    return render_template("home/modifyPassword.html")


@home.route("/collect")
@user_login
def collect():
    """
    收藏歌曲
    """
    song_id = request.args.get("id", "")  # 接收传递的参数歌曲ID
    user_id = session['user_id']  # 获取当前用户的ID
    collect = Collect.query.filter_by(  # 根据用户ID和景区ID判断是否该收藏
        user_id=int(user_id),
        song_id=int(song_id)
    ).count()
    res = {}
    # 已收藏
    if collect == 1:
        res['status'] = 0
        res['message'] = '已经收藏'
    # 未收藏进行收藏
    if collect == 0:
        collect = Collect(
            user_id=int(user_id),
            song_id=int(song_id)
        )
        db.session.add(collect)  # 添加数据
        db.session.commit()  # 提交数据
        res['status'] = 1
        res['message'] = '收藏成功'
    return jsonify(res)  # 返回json数据


@home.route("/collect_list")
@user_login
def collectList():
    page = request.args.get('page', type=int)  # 获取page参数值
    page_data = Collect.query.paginate(page=page, per_page=10)
    return render_template('home/collectList.html', page_data=page_data)


@home.route("/manage_artist_list")
@admin_login
def manageArtist():
    '''
    后台管理
    '''
    page = request.args.get('page', type=int)  # 获取page参数值
    page_data = Artist.query.paginate(page=page, per_page=10)
    return render_template('home/manageArtist.html', page_data=page_data)


@home.route("/manage_artist_add", methods=["GET", "POST"])
@admin_login
def manageArtistAdd():
    '''
    新增歌手
    '''
    if request.method == "POST":  # 提交注册表单
        artistName = request.form.get("artistName")
        style = request.form.get("style")
        imgURL = request.form.get("imgURL")
        isHot = request.form.get("isHot")
        # 判断歌手是否存在
        artist = Artist.query.filter_by(artistName=artistName).first()  # 获取用户信息
        if artist:
            res = {}
            res['status'] = -2
            res['message'] = '该歌手已存在'
            return jsonify(res)
        # 写入到Artist表
        try:
            # 为Artist类属性赋值
            artist = Artist(
                artistName=artistName,
                style=int(style),
                imgURL=imgURL,
                isHot=int(isHot)
            )
            db.session.add(artist)  # 添加数据
            db.session.commit()  # 提交数据
            res = {}
            res['status'] = 1
            res['message'] = '添加成功'
        except:
            res = {}
            res['status'] = -1
            res['message'] = '添加失败'
        return jsonify(res)
    return render_template('home/manageArtistAdd.html')


@home.route("/manage_artist_edit", methods=["GET", "POST"])

源码获取:

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据实训是一门综合性实训课程,主要涉及到大数据的爬取、存储、分析和可视化。其中,Python是一种高级编程语言,被广泛应用于数据爬取、处理和分析的领域。 在课程中,我们会使用Python来编写爬虫程序,从股票相关的网站或API中获取股票数据。通过分析网站结构和数据接口,我们可以使用Python的各种库和框架来获取股票历史交易数据、实时行情数据等。 一旦我们成功获取了股票数据,我们可以使用Hive这个大数据存储和分析工具来存储和处理这些数据。Hive是基于Hadoop平台的数据仓库工具,可以将结构化和半结构化的数据存储在分布式文件系统中,并使用类SQL语言进行查询和分析。 通过Hive,我们可以对爬取到的股票数据进行各种数据处理和分析操作,例如计算股价涨跌幅、交易量统计、计算股票均线指标等。Hive的强大功能和灵活性使得我们可以根据自己的需求和兴趣来进行数据分析,并从中发现有价值的股票市场信息。 为了更好地展示和传达我们的数据分析结果,课程中还会涉及到可视化工具。可视化是将数据以图表、图形等形式呈现出来,使得数据更具有直观性和易懂性。Python中有很多强大的可视化库和工具,例如Matplotlib、Seaborn和Plotly等,可以帮助我们将股票数据进行可视化展示。 总而言之,大数据实训课程中通过使用Python进行股票数据的爬取、使用Hive进行数据分析和使用可视化工具展示结果,帮助我们掌握大数据处理和分析的技能,同时也使我们能够更好地理解和利用股票市场的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值