本篇音乐播放器-添加播放音乐功能实现。
目录
创建播放器数据表
设置表结构
在player/models.py中设置播放器表(Player)结构。
内容如下:
python
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)
执行创建表
命令
bash
python manage.py makemigrations
python manage.py migrate
执行
数据表结构
添加单个歌曲
创建路由
python
# 歌曲添加播放器
path('add_play', views.add_play, name='add_play'),
加入播放器视图
查询相应单曲信息,之后通过单曲与歌手外键id查询相应歌手记录,
建立播放器表与歌手关联。
python
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 = info
playDb.singler = singerDb
playDb.save()
return JsonResponse({'status': 1, 'msg': '添加"%s"成功!' % info.name})
模板处理
在基类模板文件中添加脚本方法,其他子页面调用此方法进行添加。
基类方法
使用jquery get方法请求视图,并弹窗视图处理结果。
html
<script>
// 歌曲添加播放器
function add_player(id){
$. get("/add_play", {'id':id}, function (msg) {
alert(msg.msg)
});
}
</script>
子页面调用
在图标上设置点击事件触发添加播放器方法。
html
<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文件。
html
<link rel="stylesheet" href="{% static 'css/layui.css' %}">
<script src="{% static 'js/layui.js' %}"></script>
修改弹窗
弹窗脚本修改,引入layui的脚本。
javascript
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});
});
}
优化后效果:
添加歌单全部歌曲
在歌单-单曲列表中可以添加专辑所有歌曲到播放器列表。
设置路由
python
path('songsheet_player', views.songsheet_player, name='songsheet_player'),
视图处理
传递歌单id,查询符合条件的一条专辑记录;
清空当前播放器列表数据;
通过外键关联获取所有单曲列表,循环中添加单曲到播放器列表中。
python
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 = item
playDb.singler = singerDb
playDb.save()
res = {'status': 1, 'msg': '添加"%s"全部歌曲成功!' % info.name}
else:
res = {'status': 0, 'msg': '该歌单不存在,无法添加!'}
return JsonResponse(res)
模板添加方法
脚本方法
设置添加歌单全部歌曲到播放器的方法,需要传递歌单id。
html
{% 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 %}
按钮调用
html
<button onclick="album_player({{info.id}})">
<i class="glyphicon glyphicon-plus"></i>
<span>添加</span>
</button>
添加专辑全部歌曲
在歌单-单曲列表中可以添加专辑所有歌曲到播放器列表。
设置路由
python
path('album_player', views.album_player, name='album_player'),
视图处理
传递专辑id,查询符合条件的一条专辑记录;
清空当前播放器列表数据;
通过外键关联获取所有单曲列表,循环中添加单曲到播放器列表中。
python
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 = item
playDb.singler = singerDb
playDb.save()
res = {'status': 1, 'msg': '添加"%s"全部歌曲成功!' % info.name}
else:
res = {'status': 0, 'msg': '该歌单不存在,无法添加!'}
return JsonResponse(res)
模板添加方法
脚本方法
设置添加专辑全部歌曲到播放器的方法,需要传递歌单id。
html
{% 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 %}
按钮调用
html
<button onclick="songsheet_player({{info.id}})">
<i class="glyphicon glyphicon-plus"></i>
<span>添加</span>
</button>
总结
本篇主要是音乐播放器部分功能实现,与页面歌单、专辑、单曲联动操作。