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

news2024/11/27 20:40:21

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

效果:

目录

播放列表优化

设置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://www.coloradmin.cn/o/724063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式监控之Zabbix6.0监控系统一

分布式监控之Zabbix6.0监控系统 前言一、Zabbix1、介绍2、zabbix监控原理3、Zabbix6.0版本新特性4、Zabbix6.0功能组件5、Zabbix与Prometheus对比 二、Zabbix6.0部署1、部署zabbix服务端2、添加 zabbix 客户端主机3、自定义监控内容4、zabbix 自动发现5、zabbix 自动注册 前言 …

业务安全情报第十八期 | 知名手游开启公测,大批游戏账号遭抢注倒卖

目录 某知名手游遭账号抢注倒卖 倒卖游戏者的风险特征 游戏运营商快速识别倒卖账号的黑灰产 网络游戏已经成为许多人娱乐和放松的重要途径。随着游戏玩家追求迅速提升角色等级和属性的愿望日益增长&#xff0c;游戏账号倒卖、账号出租越来越多&#xff0c;并逐步衍生出一条灰…

智慧电子班牌是什么?电子班牌云平台源码的开发技术有哪些?

智慧电子班牌是什么&#xff1f; 电子班牌是一种智能交互终端&#xff0c;电子班牌可以解决“走班教学”考勤管理问题&#xff0c;将大数据、物联网和人工智能等新兴技术和教学管理工作融合&#xff0c;提升学校管理水平和管理效率。 电子班牌是安装在学校各教室门口的高清可视…

LeetCode·每日一题·2178. 拆分成最多数目的正偶数之和·贪心

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/maximum-split-of-positive-even-integers/solutions/2332925/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-zoioi/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系…

Vue2通过点击渲染循环的echarts

底下放置源码cv即可食用 几个注意事项&#xff1a; echartsData 这个变量是为了模拟后端数据格式changeTag() 这个方法是为了控制最多可以多选几条最后关于循环echarts的灵感来源于 明天也要努力 <!DOCTYPE html> <html lang"en"><head><meta…

上海亚商投顾:沪指缩量调整 PCB、CPO概念股全天领涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡调整&#xff0c;创业板指午后跌超1%。AI概念股反弹&#xff0c;存储芯片、CPO等方向领涨&#xff0c…

【MySQL】MySQL基本语句大全

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️MySQL】 文章目录 前言结构化查询语句分类MySQL语句大全&#x1f4da;DDL&#xff08;对数据库和表的操作&#xff09;&#x1f916;DQL&#xff08;查询语句&#xff09;&#x1f4bb;关键字&#x…

香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

目录 1. 说明 2. 步骤 2.1 准备工作 2.2 安装 2.2.1 用jenkins原站for k8s的安装仓方法安装 2.2.2 Helm 安装 3. 相关命令 4. 遇到的问题 5. 参考 1. 说明 在k8s上部署jenkins&#xff0c;并用 jenkins.k8s-t2.com访问在namespace为devops下安装在指定节点k8s-master-…

CAN总线和DCB文件格式

目录 CAN总线和DBC格式1. CAN总线1.1 CAN总线的组织结构1.2 CAN的信号结构 2. DBC格式2.1 通用描述2.2 DBC文件的结构 3. DBC文件官方示例3. DBC文件官方示例 CAN总线和DBC格式 1. CAN总线 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;一…

【避坑指南】Unity3D接入外网SDK笔记(GooglePlay/FaceBook/AppsFlyer)

这段时间折腾了一下获取归因数据相关的SDK&#xff0c;遇到非常多奇奇怪挂的报错&#xff0c;在此记录一下。 准备资源 Unity的Jar包解析器&#xff0c;下面提及的SDK都需要工具解析并下载依赖 https://github.com/googlesamples/unity-jar-resolverAndroidStudio&#xff0c…

微信小程序基础库的介绍与更改

一、什么是基础库&#xff1f; 1、基础库是小程序运行的必要环境&#xff0c;我们的开发主要就是面向基础库开发的。基础库封装了微信和手机的能力并提供给小程序使用&#xff0c;我们使用基础库提供的组件和API开发起来非常的方便。 2、基础库存在于我们的微信客户端中&…

骑行,怎么样才能安全的下坡?

大家好&#xff0c;今天我们来聊聊自行车运动中的一个重要话题&#xff1a;如何安全地骑行下坡&#xff1f; 首先&#xff0c;我们要明白&#xff0c;安全下坡的秘诀在于控制。一是速度的控制&#xff0c;二是自身姿势的控制。就像一只灵活的狐狸&#xff0c;既要控制好自己的速…

Excel表格套用格式后分类汇总用不了解决方法之一

表格套用格式选择表格后分类汇总显示灰色不可用&#xff0c;如下图&#xff1a; 解决方法之一&#xff1a;右键-表格-转为区域&#xff0c;确定

如何部署LVS负载均衡集群(NAT模式)

目录 一、集群 负载均衡集群&#xff08;Load Balance Cluster&#xff09; 高可用集群&#xff08;High Availability Cluster&#xff09; 高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 二、负载均衡工作模式 VIP地址特性&#xff08;虚拟…

剑指offer(C++)-JZ40:最小的K个数(算法-排序)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,…

1.1 熟悉x64dbg调试器

x64dbg 是一款开源、免费、功能强大的动态反汇编调试器&#xff0c;它能够在Windows平台上进行应用程序的反汇编、调试和分析工作。与传统的调试器如Ollydbg相比&#xff0c;x64dbg调试器的出现填补了Ollydbg等传统调试器的不足&#xff0c;为反汇编调试工作提供了更高效、更可…

Python 中的 JSON 操作:简单、高效的数据交换格式

目录 1. JSON 数据格式 2. Python 操作 JSON 文件 2.1 JSON 反序列化为 Python 对象 2.2 Python 序列化为 JSON 3 工作中的常见场景 3.1 网络请求和响应 服务器端&#xff08;Python&#xff09;&#xff1a; 客户端&#xff08;JavaScript&#xff09;&#xff1a; 3…

5G三防平板电脑有哪些功能与特点

随着科技的不断进步&#xff0c;平板电脑已经成为许多人生活中必不可少的设备之一。而随着5G技术的全面普及&#xff0c;5G三防平板电脑也应运而生。这些平板电脑集成了内置高通八核处理器搭配Adreno GPU&#xff0c;搭载全新Android 11操作系统&#xff0c;以及提供多应用切换…

docker-compose实现微服务jar+mysql的容器服务发布(经典版)

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

Django proxy_view代理后端

某些需求下&#xff0c;需要通过Django代理后端&#xff0c;比如开发celery定时任务时候&#xff0c;需要代理后端的flower&#xff0c;代理后端可以直接使用Django自带的授权&#xff0c;方便权限控制 具体操作如下 1.安装 django-proxy 包&#xff0c;进行代理 pip install …