Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站,

本篇音乐播放器-添加播放音乐功能实现。

目录

创建播放器数据表

设置表结构

 执行创建表

命令

执行

数据表结构

添加单个歌曲

创建路由

加入播放器视图

模板处理

基类方法

子页面调用

优化弹窗

加入layui文件

基类模板引入layui

修改弹窗

添加歌单全部歌曲

设置路由

视图处理

模板添加方法

脚本方法

按钮调用

添加专辑全部歌曲

设置路由

视图处理

模板添加方法

脚本方法

按钮调用

总结


创建播放器数据表

设置表结构

在player/models.py中设置播放器表(Player)结构。

内容如下:

class Player(BaseModel):""" 播放器表 """name = models.CharField('单曲名称', max_length=100)# 与单曲表多对多关系singe = models.ForeignKey('Singe', on_delete=models.CASCADE)singler = models.ForeignKey("Singler", on_delete=models.CASCADE)

 

 执行创建表

命令

python manage.py makemigrations
python manage.py migrate

执行

数据表结构

添加单个歌曲

创建路由

# 歌曲添加播放器
path('add_play', views.add_play, name='add_play'),

加入播放器视图

查询相应单曲信息,之后通过单曲与歌手外键id查询相应歌手记录,

建立播放器表与歌手关联。

def add_play(request):""" 添加歌曲到播放器 """# 查询相应单曲id = request.GET.get('id')info = Singe.objects.filter(pk=id).first()if info:# 加入到播放列表中singerDb = Singler.objects.filter(id=info.singler_id).first()# 新增单曲playDb = Player()playDb.name = info.name# 建立关联playDb.singe = infoplayDb.singler = singerDbplayDb.save()return JsonResponse({'status': 1, 'msg': '添加“%s”成功!' % info.name})

模板处理

在基类模板文件中添加脚本方法,其他子页面调用此方法进行添加。

基类方法

使用jquery get方法请求视图,并弹窗视图处理结果。

<script>// 歌曲添加播放器
function add_player(id){$. get("/add_play", {'id':id}, function (msg) {alert(msg.msg)});
}</script>

子页面调用

在图标上设置点击事件触发添加播放器方法。

<div class="song_opts flex_c"><i class="glyphicon glyphicon-plus" onclick="add_player({{song.id}})"></i><i class="glyphicon glyphicon-play"></i><i class="glyphicon glyphicon-heart"></i>
</div>

效果:

优化弹窗

之前的弹窗太难看,换成layui的弹窗。

加入layui文件

使用layui的弹窗,下载layui文件引入到static文件夹中。

基类模板引入layui

在base.html中引入layui的css和js文件。

<link rel="stylesheet" href="{% static 'css/layui.css' %}">
<script src="{% static 'js/layui.js' %}"></script>

 

修改弹窗

弹窗脚本修改,引入layui的脚本。

layui.use(['layer', 'form'], function(){var layer = layui.layer;
});// 歌曲添加播放器
function add_player(id){$. get("/add_play", {'id':id}, function (msg) {layer.msg(msg.msg, {icon: 6});});
}

优化后效果:

添加歌单全部歌曲

在歌单-单曲列表中可以添加专辑所有歌曲到播放器列表。

设置路由

path('songsheet_player', views.songsheet_player, name='songsheet_player'),

 

视图处理

传递歌单id,查询符合条件的一条专辑记录;

清空当前播放器列表数据;

通过外键关联获取所有单曲列表,循环中添加单曲到播放器列表中。

def songsheet_player(request):""" 添加歌单全部歌曲到播放器 """# 查询歌单信息id = request.GET.get('id')info = SongSheet.objects.filter(pk=id).first()if info:# 歌单单曲列表song_list = info.singe.all()if song_list:# 清除掉当前播放列表歌曲Player.objects.all().delete()# 添加歌单中所有歌曲for item in song_list:# 加入到播放列表中singerDb = Singler.objects.filter(id=item.singler_id).first()# 新增单曲playDb = Player()playDb.name = item.name# 建立关联playDb.singe = itemplayDb.singler = singerDbplayDb.save()res = {'status': 1, 'msg': '添加“%s”全部歌曲成功!' % info.name}else:res = {'status': 0, 'msg': '该歌单不存在,无法添加!'}return JsonResponse(res)

 

模板添加方法

脚本方法

设置添加歌单全部歌曲到播放器的方法,需要传递歌单id。

{% block styleJs %}
{# 子页面引入js文件 #}
<script>
// 添加歌单全部歌曲到播放器
function songsheet_player(id){$. get("/songsheet_player", {'id':id}, function (msg) {if(msg.status == 1) {layer.msg(msg.msg, {icon: 6});} else {layer.msg(msg.msg, {icon: 5});}});
}
</script>
{% endblock styleJs %}

 

按钮调用
<button onclick="album_player({{info.id}})"><i class="glyphicon glyphicon-plus"></i>&nbsp;<span>添加</span>
</button>

 

添加专辑全部歌曲

在歌单-单曲列表中可以添加专辑所有歌曲到播放器列表。

设置路由

path('album_player', views.album_player, name='album_player'),

视图处理

传递专辑id,查询符合条件的一条专辑记录;

清空当前播放器列表数据;

通过外键关联获取所有单曲列表,循环中添加单曲到播放器列表中。

def album_player(request):""" 添加专辑全部歌曲到播放器 """# 查询歌单信息id = request.GET.get('id')info = Album.objects.filter(pk=id).first()if info:# 歌单单曲列表song_list = info.singe.all()if song_list:# 清除掉当前播放列表歌曲Player.objects.all().delete()# 添加歌单中所有歌曲for item in song_list:# 加入到播放列表中singerDb = Singler.objects.filter(id=item.singler_id).first()# 新增单曲playDb = Player()playDb.name = item.name# 建立关联playDb.singe = itemplayDb.singler = singerDbplayDb.save()res = {'status': 1, 'msg': '添加“%s”全部歌曲成功!' % info.name}else:res = {'status': 0, 'msg': '该歌单不存在,无法添加!'}return JsonResponse(res)

模板添加方法

脚本方法

设置添加专辑全部歌曲到播放器的方法,需要传递歌单id。

{% block styleJs %}
{# 子页面引入js文件 #}<script>
// 添加专辑全部歌曲到播放器
function album_player(id){$. get("/album_player", {'id':id}, function (msg) {if(msg.status == 1) {layer.msg(msg.msg, {icon: 6});} else {layer.msg(msg.msg, {icon: 5});}});
}
</script>
{% endblock styleJs %}

 

按钮调用
<button onclick="songsheet_player({{info.id}})"><i class="glyphicon glyphicon-plus"></i>&nbsp;<span>添加</span>
</button>

总结

本篇主要是音乐播放器部分功能实现,与页面歌单、专辑、单曲联动操作。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BAT033:批量删除文件特定字符及特定字符之后的字符

引言&#xff1a;编写批处理程序&#xff0c;实现批量删除文件特定字符及特定字符之后的字符。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【…

16-spring AOP核心对象的创建

文章目录 1. aop的几个重要概念2. aop bean definition3. AspectJPointcutAdvisor4.AopConfigUtils5.AnnotationAwareAspectJAutoProxyCreator6. 循环依赖 1. aop的几个重要概念 参考官方解释&#xff1a;https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-…

全连接网络参数Xavier初始化

1.梯度消失 考虑下图的神经网络&#xff0c;在使用梯度下降法迭代更新W_ki和W_ij时&#xff0c;它们的梯度方向间有什么关系&#xff1f; 它们的梯度关系如下&#xff1a; 从上述两个式子我们大致可以看出&#xff0c;损失函数L关于第h层参数的梯度由两部分组成&#xff1a;…

VMware中安装centos无网络,配置教程

VMware虚拟机中装了centos7,装完之后一直无法联网&#xff0c;网上的教程都试了也没用&#xff0c;这里记录一下最后的解决方案。 VMware配置 1. 点击 虚拟机-》设置 windows配置 打开电脑网络连接 共享选项选中我们虚拟机网络中包含的VMnet8的 VMnet8网络就自动变成这样了&a…

关于利用webase-front节点控制台一键导出的java项目解析

搭建区块链系统和管理平台分别用的的fisco、webase。 关于我们在利用java开发DApp(去中心化引用)&#xff0c;与区块链系统交互&#xff0c;可以用: 1.webase前置服务给开发者提供的api&#xff1a;我们在搭建好fisco链之后&#xff0c;在搭一个webase-front服务&#xff0c;我…

基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale …

线性代数-Python-02:矩阵的基本运算 - 手写Matrix及numpy中的用法

文章目录 一、代码仓库二、矩阵的基本运算2.1 矩阵的加法2.2 矩阵的数量乘法2.3 矩阵和向量的乘法2.4 矩阵和矩阵的乘法2.5 矩阵的转置 三、手写Matrix代码Matrix.pymain_matrix.pymain_numpy_matrix.py 一、代码仓库 https://github.com/Chufeng-Jiang/Python-Linear-Algebra-…

计算机网络学习笔记(四):网络层(待更新)

目录 4.1 IP地址、子网划分、合并超网 4.1.1 IP地址、子网掩码、网关 4.1.2 IP地址的编址方法1&#xff1a;IP地址分类&#xff08;A~E类地址、保留的IP地址&#xff09; 4.1.4 IP地址的编址方法2&#xff1a;子网划分&#xff08;等长、变长&#xff09; 4.1.5 IP地址的编…

基于Python实现的一款轻量、强大、好用的视频处理软件,可缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕等

Quick Cut 是一款轻量、强大、好用的视频处理软件。它是一个轻量的工具&#xff0c;而不是像 Davinci Resolve、Adobe Premiere 那样专业的、复杂的庞然大物。Quick Cut 可以满足普通人一般的视频处理需求&#xff1a;压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段…

【LeetCode每日一题合集】2023.10.9-2023.10.15(贪心⭐位运算的应用:只出现一次的数字)

文章目录 2578. 最小和分割&#xff08;贪心&#xff09;2731. 移动机器人&#xff08;脑筋急转弯排序统计&#xff09;2512. 奖励最顶尖的 K 名学生&#xff08;哈希表排序&#xff09;&#xff08;练习Java语法&#xff09;代码风格1代码风格2 2562. 找出数组的串联值&#x…

【七:docken+jenkens部署】

一&#xff1a;腾讯云轻量服务器docker部署Jenkins https://blog.csdn.net/qq_35402057/article/details/123589493 步骤1&#xff1a;查询jenkins版本&#xff1a;docker search jenkins步骤2&#xff1a;拉取jenkins镜像 docker pull jenkins/jenkins:lts步骤3&#xff1a;…

网络安全中的人工智能:优点、缺点、机遇和危险

2022 年秋天&#xff0c;人工智能在商业领域爆发&#xff0c;引起了轰动&#xff0c;不久之后&#xff0c;似乎每个人都发现了 ChatGPT 和 DALL-E 等生成式 AI 系统的新的创新用途。世界各地的企业开始呼吁将其集成到他们的产品中&#xff0c;并寻找使用它来提高组织效率的方法…

MySQL --- 聚合查询 和 联合查询

聚合查询&#xff1a; 下文中的所有聚合查询的示例操作都是基于此表&#xff1a; 聚合函数 聚合函数都是行与行之间的运算。 count() select count(列名) from 表名; 统计该表中该列的行数&#xff0c;但是 null 值不会统计在内&#xff0c;但是如果写为 count(*) 那么 nu…

Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】

Redis性能滑坡&#xff1a;哈希表碰撞的不速之客 前言第一部分&#xff1a;Redis哈希表简介第二部分&#xff1a;哈希表冲突原因第三部分&#xff1a;Redis哈希函数第四部分&#xff1a;哈希表冲突的性能影响第五部分&#xff1a;解决冲突策略第六部分&#xff1a;redis是如何解…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日&#xff0c; 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品&#xff0c;分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

深入探讨 Golang 中的追加操作

通过实际示例探索 Golang 中的追加操作 简介 在 Golang 编程领域&#xff0c;append 操作是一种多才多艺的工具&#xff0c;使开发人员能够动态扩展切片、数组、文件和字符串。在这篇正式的博客文章中&#xff0c;我们将踏上一段旅程&#xff0c;深入探讨在 Golang 中进行追加…

Linux入门攻坚——4、shell编程初步、grep及正则表达式

bash的基础特性&#xff08;续&#xff09;&#xff1a; 1、提供了编程环境&#xff1a; 编程风格&#xff1a;过程式&#xff1a;以指令为中心&#xff0c;数据服务于执行&#xff1b;对象式&#xff1a;以数据为中心&#xff0c;指令服务于数据 shell编程&#xff0c;编译执…

墨迹天气商业版UTF-8模板,Discuz3.4灰白色风格(带教程)

1.版本支持&#xff1a;Discuzx3.4版本&#xff0c;Discuzx3.3版本&#xff0c;DiscuzX3.2版本。包括网站首页&#xff0c;论坛首页&#xff0c;论坛列表页&#xff0c;论坛内容页&#xff0c;论坛瀑布流,资讯列表页(支持多个)&#xff0c;产品列表页(支持多个)&#xff0c;关于…

Visual Components软件有哪些用途 衡祖仿真

Visual Components是一款用于制造业虚拟仿真的软件&#xff0c;主要用于工业自动化和制造领域。我们一起来看一下该软件有哪些功能吧&#xff01; 1、工厂仿真 Visual Components可以建立虚拟的工厂环境&#xff0c;模拟和优化生产流程。用户可以创建工厂布局、定义设备和机器人…

多年没有遇到如此流畅的面试了

美东一公司的面试&#xff0c;有多年没有遇到如此流畅的面试了。 本来说的面试时间是 30 分钟&#xff0c;这个还是第一轮处于电话面试那种&#xff0c;但是不知道为什么最后面试整个时间都延长到了快一个小时&#xff0c;貌似双方都还继续沟通下&#xff0c;有点意犹未尽的感觉…