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

news2024/12/25 23:41:31

 在《Django实现简单的音乐播放器 1》前期准备的基础上开始开发。

 效果:

目录

项目视图

创建视图方法

路由加载视图

加载模板

创建首页html文件

加载静态资源文件

加载静态文件

使用方法

启动服务器

加载数据表

创建表模型

生成表迁移

执行创建表

插入表数据

播放歌曲列表

视图

路由设置

请求歌曲列表

总结


 

项目视图

创建视图方法

在player中的views.py中创建显示播放器的视图方法

from django.shortcuts import render


# Create your views here.

def index(request):
    """ 展示音乐播放器 """

    return render(request, 'player/index.html')

路由加载视图

引入视图,增加路由访问视图中的index方法

from django.urls import path
from . import views


urlpatterns = [
    path(r'', views.index, name='player'),
]

加载模板

把找到的音乐播放器模板和静态文件加载进入项目。

创建首页html文件

在templates/player目录下创建index.html文件,并把模板文件内容拷贝过来。

加载静态资源文件

转移模板文件中的js/css/image/mp3文件到static目录下的相应资源文件夹中

如下图:

 

加载静态文件

修改模板中对静态资源文件的路径,使用django中的静态资源加载方法

使用方法

模板顶部 {% load static %}

路径替换为

<link rel="stylesheet" href="{% static 'css/iconfont.css' %}">

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

启动服务器

python manage.py runserver

加载数据表

创建表模型

在player工程目录下的models.py中创建单曲表模型。

内容如下:

from django.db import models

# Create your models here.
class Single(models.Model):
    """ 歌曲表模型 """

    title = models.CharField(max_length=20)
    singer = models.CharField(max_length=100)
    songUrl = models.CharField(max_length=180)
    imageUrl = models.CharField(max_length=180)

生成表迁移

python manage.py makemigrations

执行创建表

python manage.py migrate

插入表数据

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (1, '123木头人 - 黑Girl.mp3', ' 黑Girl', '/static/media/123木头人 - 黑Girl.mp3', '/static/images/1.png');

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (2, 'Bazzaya - 蔡妍.mp3', ' 蔡妍', '/static/media/Bazzaya - 蔡妍.mp3', '/static/images/2.png');

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (3, 'Fade - Alan Walker.mp3', ' Alan Walker', '/static/media/Fade - Alan Walker.mp3', '/static/images/3.png');

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (4, 'lemon tree[中文版] - 王若琳.mp3', ' 王若琳', '/static/media/lemon tree[中文版] - 王若琳.mp3', '/static/images/4.png');

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (5, 'Lil Mama - Jain.mp3', ' Jain', '/static/media/Lil Mama - Jain.mp3', '/static/images/5.png');

INSERT INTO `mymp3`.`player_single` (`id`, `title`, `singer`, `songUrl`, `imageUrl`) VALUES (6, '也许是爱!- 蔡妍.mp3', ' 蔡妍', '/static/media/也许是爱!- 蔡妍.mp3', '/static/images/6.png');

注意:歌曲和歌曲图片文件已放置在static相应资源文件夹中,不在单独说明。

播放歌曲列表

视图

视图请求数据模型获取所有歌曲信息列表,并返回json格式

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})

路由设置

增加列表路由设置

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

请求歌曲列表

把player.js歌曲类中固定的歌曲列表改为通过路由获取视图的数据,还是通过构造函数调用。

// 获取歌曲列表
getSongs() {
    let mp3list = [{
        id: 1,
        title: '! (也许是爱!) - 蔡妍',
        singer: '蔡妍',
        songUrl: '/static/media/! (也许是爱!) - 蔡妍.mp3',
        imageUrl: '/static/images/1.png'
    }]

    $.getJSON('/media_list', {}, function(data, msg) {
        let res = data.list
        for (let i=0; i<res.length; i++) {
            mp3list[i] = {
                id:res[i].id,
                title:res[i].title,
                singer:res[i].singer,
                songUrl:res[i].songUrl,
                imageUrl:res[i].imageUrl
            }
        }
    })
    this.songs = mp3list
}

总结

本篇主要加载静态模板并改为动态数据,已经是一个简单的音乐播放器了,可以播放和切换歌曲,只是新添加歌曲需要自己手动添加数据表和媒体文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727287.html

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

相关文章

CRM中的多业务场景管理是什么?有哪些功能?

为了适应不同的客户需求和市场变化&#xff0c;很多企业开展了多个业务场景&#xff08;产品线、销售渠道等&#xff09;。这些多业务场景给企业的客户管理带来了很大的挑战&#xff0c;如何有效地管理多种业务是企业急需解决的问题。下面说说&#xff0c;多业务场景下的CRM管理…

在Window仿Linux终端命令学习Python

在Window仿Linux终端命令学习Python Echox 命令 -- 主要带颜色输出ls 命令findx 命令~~待续~~ python3 Echox 命令 – 主要带颜色输出 查看 python输出颜色&#xff08;终端控制台&#xff09; ls 命令 1、getopt 模块参数解析 &#xff1a; Python 命令行参数 2、os.getcwd…

怎么免费视频压缩器?这 9 个最佳免费视频压缩器教你轻松学会!

视频有多种格式、不同的大小和不同的压缩级别。但是&#xff0c;您可以使用最好的视频压缩器来&#xff1a; 减小文件大小提高压缩质量更好地服务您的观众 我们将列出九个领先的视频压缩软件精选&#xff0c;您今天可以免费使用它们来增强您的视频。 9 个顶级免费视频压缩软件…

7 字符和字符串的“+”操作

7.1 字符的“”操作 char类型的数据参与加法运算。如下&#xff1a; char a A; int b 10 ; int c a b ; System.out.println(c); 结果如下&#xff1a; 接收结果使用的是int数据类型&#xff0c;按照相加时哪个数据类型大&#xff0c;结果就是哪个数据类型的规则&#xff…

CMake 使用教程 (四)

1.0 日志 在 CMake 中可以用用户显示一条消息&#xff0c;该命令的名字为 message&#xff1a; message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)(无) &#xff1a;重要消息STATUS &#xff1a;非重要消息WARNING&#…

51从零开始学Java之详解Java中的包装类

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了Java中的Object类&#xff0c;它属于我们开发时的常用类…

2023(WAIC)智能驾驶科技峰会丨拓数派大模型下的数据计算系统,助力汽车智能化产业数据增值

2023 智能驾驶科技峰会在上海圆满落幕&#xff0c;本次大会由世界人工智能大会&#xff08;WAIC&#xff09;组委会办公室指导&#xff0c;浦东新区人民政府支持&#xff0c;浦东新区科技和经济委员会、中国 &#xff08;上海&#xff09;自由贸易试验区管理委员会金桥管理局主…

【SAP-ABAP】RPR_ABAP_SOURCE_SCAN 搜索带特定字符串的程序

昨日问了懒神&#xff0c;才知道还有这功能&#xff0c;真好用 业务背景&#xff1a;需要查找系统中有哪些程序带了特定的字符串&#xff08;一般类似于某些条件写死了&#xff09; 程序&#xff1a;RPR_ABAP_SOURCE_SCAN 程序&#xff1a;RS_ABAP_SOURCE_SCAN SE38执行程序…

Blazor前后端框架Known功能介绍:系统安装激活及自定义

本章介绍系统安装与激活及其自定义功能。 概述 框架内置简单的系统安装功能。录入企业编码、名称、系统名称、产品密钥、管理员密码信息完成安装。可自定义高级安装功能&#xff0c;如安装数据库等您产品所需的安装信息。框架默认无需注册产品密钥&#xff0c;若产品需要安装…

【腾讯云IM】即时通讯的登录,登出,用户列表,私聊,图片发送

uniapp即时通讯 1&#xff0c;初始化&#xff08;刚开始就紧跟着文档走&#xff09;2&#xff0c;App.vue中项目引入腾讯云&#xff0c;&#xff08;附上账号在其他地方登陆的监听&#xff09;3&#xff0c;登录前必需3.1&#xff0c;获取登录id3.2&#xff0c;生成userSig&…

K8s 内存泄漏处理方法

问题描述&#xff1a; 1. 安装go环境 2. 下载地址: https://golang.google.cn/dl/[rootk8s-master home]# rm -rf /usr/local/go && tar -C /usr/local/ -zxvf go1.17.3.linux-amd64.tar.gz3. 永久配置go 环境[rootk8s-master home]# vim /etc/profile export GOPATH…

win10、mac如何使用desktop中的docker

1、安装相应系统的docker&#xff0c;安装完什么都不需要修改。 2、需要安装mysql的话首先使用命令行 3、需要把mysql等其他软件端口映射出来使用的命令 4、搞定&#xff1b;点击关闭和启动 可以安装很多软件哦&#xff0c;非常方便两条命令搞定&#xff0c;mysql、redis、mogo…

建筑物防雷工程的设计与施工

本文会介绍建筑物防雷工程的设计与施工的基本原理、方法和要求&#xff0c;以及一些典型的案例分析。建筑物防雷工程是为了保护建筑物及其内部设备、人员和财产免受雷电危害而采取的一系列技术措施。建筑物防雷工程应遵循《建筑物防雷设计规范》GB 50057-2010和《建筑物防雷工程…

ros2 机器人imu传感器 加速度计 陀螺仪精度和数据填充单位换算

起因&#xff0c;imu解算出了加速度 角速度&#xff0c;但原始数据是没有单位的&#xff0c;只是在一个精度范围的值&#xff0c;要使用这些数据&#xff0c;就需要把这些没有单位的数据换算成带单位的数据&#xff0c;下面解说一下换算原理。 imu读取数据代码参考上期的博客&…

什么是操作系统中的kernel

什么是操作系统中的kernel 一&#xff0c;图解&#xff0c;kernel在操作系统中的结构位置 二&#xff0c;文字描述解释 系统启动后,Kernel会常驻内存,负责系统的基础功能, 如进程调度,硬件管理.普通程序就是用户态程序, 在Kernel中的程序叫做内核态程序. 普通程序如果想申请…

经典图像识别卷积神经网络总结记录

这篇博文主要是延续前文系列的总结记录&#xff0c;这里主要是总结汇总日常主流的图像识别模型相关知识内容。 下面对上述列出的卷积神经网络模型进行逐个详细介绍、算法原理分析以及优缺点总结&#xff1a; (1)LeNet-5 算法原理&#xff1a; LeNet-5是最早应用于手写数字识别…

(22)LED灯(外部)

文章目录 前言 22.1 带有I2C连接的RGB LEDs/显示器 22.2 串行连接的设备 22.3 NTF LED的含义 前言 外部 LED 或 LED 显示屏可以通过连接到自动驾驶仪的 I2C 端口&#xff0c;或者在 4.0 及以后的版本中&#xff0c;如果是串行编程的设备&#xff0c;可以通过输出使用 SERV…

【Redis】3、Redis 作为缓存(Redis中的穿透、雪崩、击穿、工具类)

目录 一、什么是缓存二、给业务添加缓存&#xff08;减少数据库访问次数&#xff09;三、给店铺类型查询业务添加缓存(1) 使用 String 类型(2) 使用 List 类型 四、缓存的更新策略(1) 主动更新(2) 最佳实现方案(3) 给查询商铺的缓存添加超时剔除和主动更新的策略① 存缓存&…

mysql 练习---表和表的字段的增删改

环境&#xff1a; 命令&#xff1a; (1)create database Market; (2) create table customers( c_num int(11) primary key auto_increment, c_name varchar(50), c_contact varchar(50), c_city varchar(50), c_birth datetime not null );(3) alter table customers mod…