Django实现简单的音乐播放器 3

news/2024/7/8 4:16:44

 在原有音乐播放器上请求方式优化和增加加载本地音乐功能。

效果:

目录

播放列表优化

设置csrf_token

前端改为post请求

视图端增加post验证

加载歌曲

视图

设置路由

模板

加载layui css

加载layui js

增加功能列表

功能列表脚本实现

最终效果

总结


播放列表优化

原有get请求改为post请求。

设置csrf_token

在body标签中设置csrf_token标签

{% csrf_token %}

前端改为post请求

在原来player.js歌曲类基础上把歌曲列表变量改为ajax通过后端接口获取,在歌曲类构造函数中调用设置歌曲信息列表。

注意:因为使用post请求,需要加载django csrf token,否则会出现403响应。

// 获取歌曲列表
getSongs(){
    let mp3list = [];

    let csrf = $('input[name="csrfmiddlewaretoken"]').val();

    $.ajax({
        type: 'POST',
        url: "/media_list",
        data: {id: 1, csrfmiddlewaretoken: csrf},
        dataType: 'json',
        success: function (data) {
            mp3list = data.list;
            // 将mp3list赋值给this.songs
            this.songs = mp3list;
            // 调用渲染歌曲列表的方法
            this.renderSongList();
        }.bind(this),
        error: function (e) {
            console.log("ERROR : ", e);
        }
    });
}

视图端增加post验证

from django.views.decorators.http import require_http_methods


@require_http_methods(['POST'])
def media_list(request):
    """ MP3音乐列表 """

    mediaList = Single.objects.all()

    arr = []
    for item in mediaList:
        arr.append({
            'id': item.id,
            'title': item.title,
            'singer': item.singer,
            'songUrl': item.songUrl,
            'imageUrl': item.imageUrl,
        })


    return JsonResponse({'list': arr})

加载歌曲

在原有基础上增加加载歌曲功能,原来需要手动把歌曲信息添加数据库,修改后可以把歌曲放入static/media目录后,点击播放器的加载歌曲功能即可添加相应歌曲到数据库中。

视图

查找资源目录下所有歌曲信息,加载导入不重复的歌曲信息。

def load_music(request):
    """ 加载本地的歌曲 """

    # 项目路径
    app_path = os.path.abspath(os.path.dirname(__file__))
    # 获取媒体资源目录下所有歌曲文件
    path = app_path + '/../static/media/'
    files = os.listdir(path)

    for file in files:
        print(insert_music(file))

    return HttpResponse('加载本地音乐成功!')


def insert_music(name):
    """ 把歌曲信息插入数据表 """

    # 查询歌曲是否存在
    info = Single.objects.filter(title=name).first()
    if info:
        return True

    ext = 'mp3'
    # 判断文件后缀
    fileInfo = name.split('.')
    if len(fileInfo) != 2:
        return False

    if fileInfo[1] != ext:
        return False

    single = Single()
    single.title = name
    signers = name.split('-')
    single_1 = signers[1].strip('') if len(signers) > 1 else ''
    single.singer = single_1.strip('.mp3')
    single.songUrl = '/static/media/' + name

    # 随机1-10专辑封面图片
    sui_num = random.randint(1, 10)
    single.imageUrl = '/static/images/' + str(sui_num) + '.png'
    return single.save()

设置路由

path(r'load_music', views.load_music, name='load_music'),

模板

加载layui css

<link rel="stylesheet" type="text/css" media="screen" 
href="{% static 'css/layui.css' %}">

加载layui js

<script src="{% static 'js/layui.js' %}"></script>

增加功能列表

在播放器主体中模糊背景下增加功能列表

<!-- 模糊背景 -->
<div class="music-player__blur" style="background-image: url("/static/images/c.jpg");"></div>
<!-- 导入本地歌曲 -->
<div class="music-find_list layui-btn-container">
    <span id="btn_list" class="layui-icon layui-icon-app demo1"></span>
</div>

功能列表脚本实现

<script>
layui.use(['dropdown', 'util', 'layer', 'table'], function(){
      var dropdown = layui.dropdown
      ,util = layui.util
      ,layer = layui.layer
      ,$ = layui.jquery;

      //初演示
      dropdown.render({
        elem: '.demo1'
        ,data: [{
        title: '加载歌曲'
        ,id: 100
      }]
      ,click: function(obj){
        loadMusic()
        //layer.tips('点击了:'+ obj.title, this.elem, {tips: [1, '#5FB878']})
      }
    });

    // 请求接口 导入歌曲到数据库
    function loadMusic() {
        $.ajax({
                type: 'GET',
                url: "/load_music",
                data: {id:1},
                success: function (data) {
               layer.alert(data, {icon: 1})
                }.bind(this),
                error: function (e) {
                    console.log("ERROR : ", e);
               }
        });
    }
  })
</script>

效果

最终效果

启动服务器后通过浏览器访问,歌曲可播放并可切换相应歌曲;

还可以通过功能列表加载本地歌曲。

项目源码:

链接:https://pan.baidu.com/s/1OgqJRMObzZWY4MOwVYdScg

提取码:v53n

总结

本来打算做一个较为复杂的web 音乐播放网站,因为最近工作比较忙,于是先做一个简单的播放器练练手。主要实现一个简单的音乐播放器功能,因为时间关系,所以直接找现成的音乐播放器模板通过django改活,这样效果也比较好看一点。音乐播放器的基本功能都已实现。


http://lihuaxi.xjx100.cn/news/1316561.html

相关文章

跑深度学习nvidia驱动忽然实效的详细解决方法

由于经常跑深度学习&#xff0c;所以对于显卡驱动什么的都还是整的比较明白的不含糊&#xff0c;所以都能跑的起来。但是今天跑pytorch框架时&#xff08;用到cuda&#xff09;忽然给我报了个错&#xff1a; RuntimeError: No CUDA GPUs are available这给我整不会了&#xff…

[NISACTF 2022]babyserialize(pop链构造与脚本编写详细教学)

目录 一、理清pop链并进行标注 二、如何编写相关脚本 三、过滤与绕过 1、waf的绕过 2、preg_match的绕过 做这道题作为pop链的构造很典型&#xff0c;也很有意思&#xff0c;因为还存在一些其他东西。 打开链接&#xff0c;这种很多类的PHP代码多半是需要构造pop链 一、理…

推荐一个基于Java 的在线网盘开源程序

目录 一、软件简介 二、功能列表 文件列表 画廊模式 视频预览 文本预览 音频预览 PDF 预览 Office 预览 3d 文件预览 生成直链 页面设置 后台设置-登录 后台设置-存储源列表 后台设置-存储源权限控制 后台设置-添加存储源(本地存储) 后台设置-添加存储源 后…

存活探针副本机制2

存活探针副本机制2 本次我们开始 k8s 中存活探针和副本控制器的学习 如何保持 pod 健康 前面我们已经知道如何创建 pod&#xff0c;删除和管理 pod了&#xff0c;但是我们要如何才能保持 pod 的健康状态呢&#xff1f; 我们可以使用 存活探针和副本机制 探针的分类 探针目…

python接口自动化(十九)--Json 数据处理---实战(详解)

简介 上一篇说了关于json数据处理&#xff0c;是为了断言方便&#xff0c;这篇就带各位小伙伴实战一下。首先捋一下思路&#xff0c;然后根据思路一步一步的去实现和实战&#xff0c;不要一开始就盲目的动手和无头苍蝇一样到处乱撞&#xff0c;撞得头破血流后而放弃了。不仅什么…

使用TongRDS替换开源redis 并设置开机自启动

使用TongRDS替换开源redis 并设置开机自启动 1、安装TongRDS2、设置TongRDS开机自启动3、禁用开源redis docker 容器开机自启动 1、安装TongRDS 2、设置TongRDS开机自启动 3、禁用开源redis docker 容器开机自启动

Nginx应用 解决Nginx - 504 Gateway Time-out问题

目录 问题背景 问题分析 解决方法 拓展知识 问题背景 线上有个系统&#xff0c;最前端是设置了nginx作为代理&#xff0c;有个1个请求的接口需要耗时1.1分钟左右&#xff0c;老是出现Nginx - 504 Gateway Time-out的错误。 问题分析 绕过nginx直接访问应用tomcat直接的端口进…

Spark(15):SparkSQL之DataFrame

目录 0. 相关文章链接 1. DataFrame的作用 2. 创建DataFrame 3. SQL 语法 4. DSL 语法 5. RDD 转换为 DataFrame 6. DataFrame 转换为 RDD 0. 相关文章链接 Spark文章汇总 1. DataFrame的作用 Spark SQL 的 DataFrame API 允许我们使用 DataFrame 而不用必须去注册临时…