网站如何做微信支付宝支付,163k系统功能介绍,网页教程在线,做手机网站哪家好使用Python Django框架制作一个音乐网站#xff0c;在系列文章2的基础上继续开发#xff0c; 本篇主要是后台单曲、专辑、首页轮播图表模块开发。 目录
后台单曲、专辑表模块开发
表结构设计
单曲表#xff08;singe#xff09;结构
专辑表#xff08;album#xff0… 使用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_length50, help_text请输入单曲名称)duration models.IntegerField(help_text请输入歌曲时长ms)path models.FileField(upload_toupload_save_path, help_text请上传歌曲)lyric models.FileField(upload_toupload_save_path, help_text请上传歌曲单词)addtime models.DateTimeField(auto_now_addTrue)updatetime models.DateTimeField(auto_nowTrue)# 设置与歌手表关联外键# 一对多外键设置在多的模型中singler models.ForeignKey(Singler, on_deletemodels.CASCADE)class Album(models.Model): 专辑表 name models.CharField(max_length50, help_text请输入专辑名称)cover models.ImageField(upload_toupload_save_path, help_text请上传专辑封面图)desc models.CharField(max_length255, help_text请输入专辑描述)single_num models.IntegerField(default0, help_text请输入单曲数)single_lang models.CharField(max_length50, help_text请输入专辑语种)addtime models.DateTimeField(auto_now_addTrue)updatetime models.DateTimeField(auto_nowTrue)# 设置与歌手表关联外键 一对多 级联删除singler models.ForeignKey(Singler, on_deletemodels.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)
) ENGINEMyISAM DEFAULT CHARSETutf8mb4;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)
) ENGINEMyISAM DEFAULT CHARSETutf8mb4;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)
) ENGINEMyISAM DEFAULT CHARSETutf8mb4; 后台注册表模型
在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_length50, help_text请输入单曲名称)duration models.IntegerField(help_text请输入歌曲时长ms)path models.FileField(upload_toupload_save_path, help_text请上传歌曲)lyric models.FileField(upload_toupload_save_path, help_text请上传歌曲单词)addtime models.DateTimeField(auto_now_addTrue)updatetime models.DateTimeField(auto_nowTrue)# 设置与歌手表关联外键# 一对多外键设置在多的模型中singler models.ForeignKey(Singler, on_deletemodels.CASCADE)# 设置与专辑表关联外键album models.ForeignKey(Album, on_deletemodels.CASCADE)class Album(models.Model): 专辑表 name models.CharField(max_length50, help_text请输入专辑名称)cover models.ImageField(upload_toupload_save_path, help_text请上传专辑封面图)desc models.CharField(max_length255, help_text请输入专辑描述)single_num models.IntegerField(default0, help_text请输入单曲数)single_lang models.CharField(max_length50, help_text请输入专辑语种)addtime models.DateTimeField(auto_now_addTrue)updatetime models.DateTimeField(auto_nowTrue)# 设置与歌手表关联外键singler models.ForeignKey(Singler, on_deletemodels.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_toupload_save_path, help_text请选择上传首页轮播图)href models.CharField(max_length100, 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)
效果 总结
还是创建表模型到后台注册流程增加了自定义上传文件设置还有两种外键设置的方式分别为一对多和多对多类型其中一对多设置删除为级联方式也就是删除一时多的一方也会被删除。