Django实现音乐网站 ⑶
使用Python Django框架制作一个音乐网站,在系列文章2的基础上继续开发,
本篇主要是后台单曲、专辑、首页轮播图表模块开发。
目录
后台单曲、专辑表模块开发
表结构设计
单曲表(singe)结构
字段 |
类型 |
注释 |
id |
int(11) |
单曲id |
sid |
int(11) |
所属歌手id |
aid |
int(11) |
所属专辑id |
name |
varchar(50) |
单曲名称 |
duration |
int(11) |
时长(ms) |
path |
varchar(200) |
歌曲文件链接 |
lyric |
varchar(200) |
歌词文件链接 |
addtime |
int(11) |
发行时间 |
updatetime |
int(11) |
编辑时间 |
专辑表(album)结构
字段 |
类型 |
注释 |
id |
int(11) |
单曲id |
singler_id |
int(11) |
所属歌手id |
name |
varchar(50) |
专辑名称 |
cover |
varchar(255) |
专辑封面 |
desc |
varchar(255) |
专辑简介 |
single_num |
int(11) |
单曲数 |
lang |
varchar(50) |
专辑语种 |
addtime |
int(11) |
创建时间 |
updatetime |
int(11) |
更新时间 |
创建表模型
在player工程目录下的models.py中创建表模型。
专辑和单曲表关系为多对多,需要设置一个中间关系表;在django中多对多关系,不需要主动设置,会自动创建一个隐藏中间表。
内容如下:
-
class Singe(models.Model):
-
""" 单曲表 """
-
-
name = models.CharField(max_length=50, help_text='请输入单曲名称')
-
duration = models.IntegerField(help_text='请输入歌曲时长(ms)')
-
path = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲')
-
lyric = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲单词')
-
addtime = models.DateTimeField(auto_now_add=True)
-
updatetime = models.DateTimeField(auto_now=True)
-
-
# 设置与歌手表关联外键
-
# 一对多外键设置在多的模型中
-
singler = models.ForeignKey("Singler", on_delete=models.CASCADE)
-
-
-
class Album(models.Model):
-
""" 专辑表 """
-
-
name = models.CharField(max_length=50, help_text='请输入专辑名称')
-
cover = models.ImageField(upload_to=upload_save_path, help_text='请上传专辑封面图')
-
desc = models.CharField(max_length=255, help_text='请输入专辑描述')
-
single_num = models.IntegerField(default=0, help_text='请输入单曲数')
-
single_lang = models.CharField(max_length=50, help_text='请输入专辑语种')
-
addtime = models.DateTimeField(auto_now_add=True)
-
updatetime = models.DateTimeField(auto_now=True)
-
-
# 设置与歌手表关联外键 一对多 级联删除
-
singler = models.ForeignKey("Singler", on_delete=models.CASCADE)
-
-
# 设置与单曲表关联外键 多对多
-
Singe = models.ManyToManyField('Singe')
创建表
-
python manage.py makemigrations
-
-
python manage.py migrate
这两条命令执行结束后,数据库增加player_album、player_singe表及关系表player_album_singe
表结构如下:
-
CREATE TABLE `player_album` (
-
`id` bigint(20) NOT NULL AUTO_INCREMENT,
-
`name` varchar(50) NOT NULL,
-
`cover` varchar(100) NOT NULL,
-
`desc` varchar(255) NOT NULL,
-
`single_num` int(11) NOT NULL,
-
`single_lang` varchar(50) NOT NULL,
-
`addtime` datetime(6) NOT NULL,
-
`updatetime` datetime(6) NOT NULL,
-
`singler_id` bigint(20) NOT NULL,
-
PRIMARY KEY (`id`),
-
KEY `player_album_singler_id_cde08698` (`singler_id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-
-
CREATE TABLE `player_singe` (
-
`id` bigint(20) NOT NULL AUTO_INCREMENT,
-
`name` varchar(50) NOT NULL,
-
`duration` int(11) NOT NULL,
-
`path` varchar(100) NOT NULL,
-
`lyric` varchar(100) NOT NULL,
-
`addtime` datetime(6) NOT NULL,
-
`updatetime` datetime(6) NOT NULL,
-
`singler_id` bigint(20) NOT NULL,
-
PRIMARY KEY (`id`),
-
KEY `player_singe_singler_id_103f9b74` (`singler_id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
-
-
CREATE TABLE `player_album_singe` (
-
`id` bigint(20) NOT NULL AUTO_INCREMENT,
-
`album_id` bigint(20) NOT NULL,
-
`singe_id` bigint(20) NOT NULL,
-
PRIMARY KEY (`id`),
-
UNIQUE KEY `player_album_Singe_album_id_singe_id_5df36ff3_uniq` (`album_id`,`singe_id`),
-
KEY `player_album_Singe_album_id_2148d063` (`album_id`),
-
KEY `player_album_Singe_singe_id_f3856b29` (`singe_id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
后台注册表模型
在player目录下admin.py中注册单曲、专辑表模型到后台。
增加自定义上传文件路径方法设置。
-
def upload_save_path(instance, filename):
-
""" 上传文件保存路径 """
-
-
return 'uploads/' str(int(time.time())) '/{0}'.format(filename)
-
-
-
class Singe(models.Model):
-
""" 单曲表 """
-
-
name = models.CharField(max_length=50, help_text='请输入单曲名称')
-
duration = models.IntegerField(help_text='请输入歌曲时长(ms)')
-
path = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲')
-
lyric = models.FileField(upload_to=upload_save_path, help_text='请上传歌曲单词')
-
addtime = models.DateTimeField(auto_now_add=True)
-
updatetime = models.DateTimeField(auto_now=True)
-
-
# 设置与歌手表关联外键
-
# 一对多外键设置在多的模型中
-
singler = models.ForeignKey("Singler", on_delete=models.CASCADE)
-
# 设置与专辑表关联外键
-
album = models.ForeignKey("Album", on_delete=models.CASCADE)
-
-
-
class Album(models.Model):
-
""" 专辑表 """
-
-
name = models.CharField(max_length=50, help_text='请输入专辑名称')
-
cover = models.ImageField(upload_to=upload_save_path, help_text='请上传专辑封面图')
-
desc = models.CharField(max_length=255, help_text='请输入专辑描述')
-
single_num = models.IntegerField(default=0, help_text='请输入单曲数')
-
single_lang = models.CharField(max_length=50, help_text='请输入专辑语种')
-
addtime = models.DateTimeField(auto_now_add=True)
-
updatetime = models.DateTimeField(auto_now=True)
-
-
# 设置与歌手表关联外键
-
singler = models.ForeignKey("Singler", on_delete=models.CASCADE)
-
-
admin.site.register(Singe, SingeAdmin)
-
admin.site.register(Album, AlbumAdmin)
效果:
外键的设置,主要在添加的时候进行下拉菜单关联添加。
后台首页轮播图表模块开发
表结构设计
字段 |
类型 |
注释 |
id |
int(11) |
自增id |
path |
varchar(100) |
图片路径 |
href |
varchar(100) |
跳转路径 |
创建表模型
自增id不需指定,默认自动添加。
-
class Carousel(models.Model):
-
""" 首页轮播图 """
-
-
path = models.ImageField(upload_to=upload_save_path, help_text='请选择上传首页轮播图')
-
href = models.CharField(max_length=100, help_text='请输入点击图片后跳转路径')
创建表
-
python manage.py makemigrations
-
-
python manage.py migrate
执行过程:
后台注册表模型
在player/admin.py中添加轮播表模型,并注册。
引入表模型
from .models import Carousel
后台自定义
-
class CarouselAdmin(admin.ModelAdmin):
-
-
-
# 列表页属性
-
def get_path(self):
-
return self.path
-
-
get_path.short_description = '图片路径'
-
-
def get_href(self):
-
return self.href
-
-
get_href.short_description = '跳转路径'
-
-
# 显示字段
-
list_display = ['id', get_path, get_href]
-
-
-
admin.site.register(Carousel, CarouselAdmin)
效果:
总结
还是创建表模型到后台注册流程,增加了自定义上传文件设置,还有两种外键设置的方式:分别为一对多和多对多类型,其中一对多设置删除为级联方式,也就是删除一时多的一方也会被删除。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibebga
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22