Django实现音乐网站 ⑶

news/2024/11/18 0:14:41/

使用Python Django框架制作一个音乐网站,在系列文章2的基础上继续开发,本篇主要是后台单曲、专辑、首页轮播图表模块开发。

目录

后台单曲、专辑表模块开发

表结构设计

单曲表(singe)结构

专辑表(album)结构

创建表模型

创建表

后台注册表模型

后台首页轮播图表模块开发

表结构设计

创建表模型

创建表

后台注册表模型

引入表模型

后台自定义

总结


后台单曲、专辑表模块开发

表结构设计

单曲表(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 makemigrationspython 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 makemigrationspython manage.py migrate

执行过程:

 

后台注册表模型

在player/admin.py中添加轮播表模型,并注册。

引入表模型

from .models import Carousel

后台自定义

class CarouselAdmin(admin.ModelAdmin):# 列表页属性def get_path(self):return self.pathget_path.short_description = '图片路径'def get_href(self):return self.hrefget_href.short_description = '跳转路径'# 显示字段list_display = ['id', get_path, get_href]admin.site.register(Carousel, CarouselAdmin)

效果:

总结

还是创建表模型到后台注册流程,增加了自定义上传文件设置,还有两种外键设置的方式:分别为一对多和多对多类型,其中一对多设置删除为级联方式,也就是删除一时多的一方也会被删除。


http://www.ppmy.cn/news/998306.html

相关文章

图解:订单系统的设计

目录 订单系统简介 1. 订单系统在企业中的角色 2. 订单系统与各业务系统的关系 3. 订单系统上下游关系 4. 订单系统的业务架构 订单系统核心功能 1. 订单中所包含的内容信息 2. 流程引擎 订单系统的发展 最后 本文主要讲述了在传统电商企业中,订单系统应承…

通讯软件013——分分钟学会Kepware OPC AE Server仿真配置

本文介绍如何使用Kepware软件仿真OPC AE Server配置。相关软件可登录网信智汇(wangxinzhihui)下载。 1、创建1个数据源:本案例采用“Graybox.Simulator.1”作为数据源。连接OPC Server数据源“Graybox.Simulator.1”。 右键点击“连通性”&am…

疯狂数据结构-栈-Java

概念 基本概念解读 当谈到 "栈" 时,它是一种遵循后进先出(Last In, First Out,LIFO)原则 的有序集合。这意味着最后入栈的元素首先被弹出,而最早入栈的元素最后被弹 出。 在栈中,只能对最上面的…

深度学习之用PyTorch实现线性回归

代码 # 调用库 import torch# 数据准备 x_data torch.Tensor([[1.0], [2.0], [3.0]]) # 训练集输入值 y_data torch.Tensor([[2.0], [4.0], [6.0]]) # 训练集输出值# 定义线性回归模型 class LinearModel(torch.nn.Module):def __init__(self):super(LinearModel, self)._…

MQ面试题3

1、讲一讲Kafka与RocketMQ中存储设计的异同? Kafka 中文件的布局是以 Topic/partition ,每一个分区一个物理文件夹,在分区文件级别实现文件顺序写,如果一个Kafka集群中拥有成百上千个主题,每一个主题拥有上百个分区&am…

HTML <rt> 标签

实例 一个 ruby 注释&#xff1a; <ruby> 漢 <rt> ㄏㄢˋ </rt> </ruby>浏览器支持 元素ChromeIEFirefoxSafariOpera<rt>5.05.538.05.015.0 Internet Explorer 9, Firefox, Opera, Chrome 以及 Safari 支持 <rt> 标签。 注释&#xf…

【第四版】 信息系统项目管理高级(高项)--第五章 信息系统工程 知识点逻辑思维导图

第五章 信息系统工程 Part1 软件工程 一、架构设计 1.软件架构目的&#xff1a;解决好软件的复用、质量、维护问题2.软件架构风格 数据流风格&#xff1a;批处理序列、管道/过滤器调用/返回风格&#xff1a;主程序/子程序独立构建风格&#xff1a;通信工程、事件驱动虚拟机风格…

对嵌入式驱动的理解

一&#xff0c;裸机编程或单片机开发 裸机编程&#xff0c;顾名思义&#xff0c;就是直接在硬件上编程写代码&#xff0c;或者说编写直接在硬件上运行的程序&#xff0c;没有操作系统的支持。一般我们把没有操作系统的编程环境&#xff0c;称为裸机编程环境&#xff0c;比如在…