Django实现音乐网站 ⑶
使用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)
效果:
总结
还是创建表模型到后台注册流程,增加了自定义上传文件设置,还有两种外键设置的方式:分别为一对多和多对多类型,其中一对多设置删除为级联方式,也就是删除一时多的一方也会被删除。
相关文章:

Django实现音乐网站 ⑶
使用Python Django框架制作一个音乐网站,在系列文章2的基础上继续开发,本篇主要是后台单曲、专辑、首页轮播图表模块开发。 目录 后台单曲、专辑表模块开发 表结构设计 单曲表(singe)结构 专辑表(album)…...

(13) Qt事件系统(two)
目录 事件分发函数 无边框窗口拖动 自定义事件 发送事件的函数 自定义事件 系统定义的事件号 自定义事件号 自定义事件类 发送和处理事件 sendEvent与postEvent的区别 栈区对象 堆区对象 事件传播机制 事件传播的过程 事件传播到父组件 鼠标单击事件与按钮单击信…...
PHP的知识概要
PHP技术基础 1、PHP是Hypertext Preprocessor的缩写,是基于服务器端运行的脚本程序语言,可以实现数据库和网页之间的数据交互。PHP可以单独运行,也可镶嵌在HTML文件 中。它具有开发快速、性能稳定的优点。 2、PHP是嵌入式脚本语言&…...
JSON格式Python,Java,PHP等封装根据商品ID获取快手商品详情数据方法
快手商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取拼多多商品详情数据,您可以通过开放平台的接口或者直接访问快手商城的网页来获取商品详情信息。以下是两种常用方法的介绍: 1.…...

【ASP.NET MVC】MYSQL安装配置(4)
一、安装配置 1、下载MYSQL绿色版压缩包(略) 2、解压到目录,比如E:\mysql目录 3、设置环境变量 添加bin目录到path,方便运行Mysql的命令 先打开系统的《环境变量》配置 双击系统变量中的Path 添加Mysql的BIN目录到path: 4、在…...

前端框架学习-Vue(二)
最近在学习Vue框架,Vue中的内容很多。相当于把之前后端的MVC,V层转移到前端来编写和部署。下面是学习Vue时的大纲。 Vue生命周期是Vue应用的生命周期Vue脚手架,即vue-cli,使用node.js 来创建和启动vue项目Vue组件知识,…...

sublime配置less的一些坑(1)
仅在sublime的Install Package安装保存less报错 在sublime的Install Package安装less 打开sublime软件,按住CtrlShiftP组合键,弹出的界面中选择Install Package 选中后enter或者回车。等会弹出一个弹窗,大致意思是说你已经成功安装了package control。如果你在此之前已经安装了…...

解码“平台工程”,VMware 有备而来
随着全球数字化进程加快,企业使用前沿技术加快商业创新,以提高竞争力。其中如何加快开发效率,为客户创造更多价值成为新的关注焦点。 继DevOps后,“平台工程”(Platform Engineering) 一词引发热议。平台工…...
2023年第四届华数杯数学建模A题B题C题D题思路代码分析
文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor 1 竞赛信息 为了培养学生的创新意识及运用数…...

java版直播商城平台规划及常见的营销模式+电商源码+小程序+三级分销+二次开发 bbc
1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…...

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点
一、摘要 一般情况下,我们的笔记本或工作电脑都默认安装windows 分几个区,当下是win7 win8 win 10 win11 等,突然我们有需求需要安装个centos ,后面我们应当怎么做,要点是什么?一定要根据网上的贴子一步步来…...
FSDirectory 与 RAMDirectory
FSDirectory和RAMDirectory是Lucene搜索引擎中两种不同的Directory实现,用于管理索引数据的存储。Lucene是一个强大的开源搜索引擎库,它用于创建全文搜索功能,而Directory则是用来表示索引数据的存储位置。 FSDirectory: FSDirectory是将索引…...

小程序开发:开发框架与工具的使用指南
引言 本文以微信小程序为例介绍了小程序开发框架与工具的使用,通过本文的阅读,相信大家能够简单了解小程序开发的基本流程和常用工具,从而快速上手小程序开发。 文章目录 引言一、小程序开发框架与工具简介1.1 小程序开发框架1.2 小程序开发工…...

【LeetCode】探索杨辉三角模型
一、题目描述 力扣原题 首先我们要来了解一下题目本身在说些什么,通过下方的动图我们可以更加清楚地看到杨辉三角是怎样一步步生成的。给到的示例中我们通过输入杨辉三角的行数,然后通过计算得到这个杨辉三角的每一行是什么具体的数值 二、模型选择 首先…...

Qt 中引入ffmpeg 动态库
1、前期准备 在qt引入ffmpeg动态库的时候,需要准备ffmpeg的动态库和头文件。 2、打开qt项目 在qt项目的.pro文件中添加以下几行代码 INCLUDEPATH $$PWD/thirtLib/ffmpeg4.2/include win32: LIBS -L$$PWD/thirtLib/ffmpeg4.2/lib/ -lavcodec -lavdevice -lavf…...
工程师是怎样对待开源 qt
工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师,亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践,也看到了很多 Bad Cases,所以想把自己的一些心得体会写在这里,供工程师进行…...
Maven中Servlet的坐标为什么要添加<scope>provided</scope>
Maven中Servlet的坐标 在Maven中,我们使用坐标(Coordinates)来唯一标识一个依赖库。对于Servlet,其坐标通常是指定servlet-api包。在使用Servlet时,我们需要将其添加到项目的依赖中,以便在编译、运行和测试…...

联发科CEO:未获准向华为供货,换机潮已过去,手机需求不会更差
据钜亨网报道,联发科近期召开了业绩说明会。蔡力行,该公司副董事长兼首席执行官,表明当前手机市场需求保持稳定,并且随着过去两年用户更换潮的过去,对手机市场明年有一定期望。 根据蔡力行的指示,联发科正在…...
2023年DevOps和云趋势报告!
要点 ●云创新已从革命性阶段转变为演进性阶段,重点是迁移和重新架构工作负载。云空间已发展为提供对可扩展资源和托管服务的按需访问,强调简化交互并减少团队的认知负担。 ●人工智能 (AI) 和大型语言模型 (LLM) 可以通过解决认知过载问题并支持即时管…...

怎么学习CSS相关技术知识? - 易智编译EaseEditing
学习CSS技术是前端开发中的重要一环,它用于控制网页的样式和布局,使网页更加美观和易于使用。以下是学习CSS技术的几个方面: 基本语法和选择器: 了解CSS的基本语法,学习如何使用选择器来选择HTML元素并应用样式。 样…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...