当前位置: 首页 > news >正文

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&#xff09…...

(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元素并应用样式。 样…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...