毕设做网站和app,外贸购物网站制作,佛山seo网站排名,90设计网怎么样使用Python Django框架制作一个音乐网站#xff0c; 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录
新增编辑
歌手下拉显示修改
设置歌曲时长
安装eyed3库
获取mp3时长
歌曲时长字段修改
重写save方法
增加歌手单曲数量
查询歌手单曲数量 … 使用Python Django框架制作一个音乐网站 本篇主要是后台对单曲原有功能的基础上进行部分功能实现和显示优化。 目录
新增编辑
歌手下拉显示修改
设置歌曲时长
安装eyed3库
获取mp3时长
歌曲时长字段修改
重写save方法
增加歌手单曲数量
查询歌手单曲数量
列表显示
显示歌手名称
获取歌手名称
设置歌手名称显示
列表显示歌曲时长
单曲表模型整体
总结 新增编辑
歌手下拉显示修改
新增时选择歌手显示为对象无法确认歌手。 需修改Singler表模型增加__str__方法
内容如下
def __str__(self): 修改返回格式 return self.name 效果 设置歌曲时长
歌曲时长的值从输入框填写改为后台设置为读取歌曲文件获取的时长。 安装eyed3库
命令如下
pip install eyed3 获取mp3时长
内容如下
import eyed3def get_duration_mp3(file_path): 获取mp3音频文件时长 info eyed3.load(file_path)return info.info.time_secs 歌曲时长字段修改
修改Singe Model类
首先把歌曲时长字段设置为admin不可改写。
duration models.IntegerField(editableFalse) 重写save方法
在重写save方法的内部需要先调取父类保存方法后文件会被保存到相应路径
之后才会有文件路径读取MP3文件获取文件时长后再存储一次至于简单的方法因为对django还在学习中暂时没发现。
def save(self, force_insertFalse, force_updateFalse, usingNone,update_fieldsNone): 重写save方法 处理歌曲时长 super().save()#get_singe_singler_num(self.singler)path_name str(self.path.name)if path_name.endswith(.mp3):save_path os.path.join(settings.MEDIA_ROOT, path_name)print(save_path)self.duration get_duration_mp3(save_path)print(self.duration)super().save() 增加歌手单曲数量
需要在增加相应歌手关联单曲时同时增加该歌手的单曲数量。 查询歌手单曲数量
在player/models.py中新增方法通过单曲表歌手外键id查询相应歌手拥有单曲数量。
内容如下
def get_singe_singler_num(singler_id):获取单曲表中所属歌手数:param singler_id::return:return Singe.objects.filter(singler_idsingler_id).count() 同步歌手单曲数量
单曲保存时处理歌手单曲数量修改单曲表模型save方法在最后保存前增加处理。
内容如下
def save(self, force_insertFalse, force_updateFalse, usingNone,update_fieldsNone): 重写save方法 处理歌曲时长 歌手单曲数量 super().save()path_name str(self.path.name)if path_name.endswith(.mp3):save_path os.path.join(settings.MEDIA_ROOT, path_name)self.duration get_duration_mp3(save_path)# 获取相应歌手单曲数singe_num get_singe_singler_num(self.singler_id)# 更新相应歌手的单曲数Singler.objects.filter(pkself.singler_id).update(singe_numsinge_num)super().save() 列表显示
显示歌手名称
单曲列表关联歌手外键id如果需要显示歌手名称也需要修改否则只显示外键id。 获取歌手名称
在player/admin.py中设置方法通过外键id去查询相应歌手信息。
内容如下
def get_singler_name(id):获取歌手名称:param id:歌手id:return:return Singler.objects.get(pkid) 设置歌手名称显示
修改后台单曲类中外键字段自定义显示处理。
class SingeAdmin(admin.ModelAdmin): 后台单曲类 ......def get_singler_id(self):return get_singler_name(self.singler_id)get_singler_id.short_description 歌手
效果 列表显示歌曲时长
修改后台单曲类增加显示歌曲时长字段。
def get_duration(self):return self.durationget_duration.short_description 时长(s)# 显示字段
list_display [id, get_name, get_singler_id, get_duration, get_addtime, get_updatetime] 单曲表模型整体
class Album(BaseModel): 专辑表 class Meta:verbose_name 专辑verbose_name_plural 专辑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, editableFalse)langs [(国语, 国语), (普通话, 普通话), (英语, 英语), (日韩, 日韩)]single_lang models.CharField(专辑语种, max_length50, choiceslangs, help_text请选择专辑语种)# 设置与歌手表关联外键 一对多singler models.ForeignKey(Singler, on_deletemodels.CASCADE, verbose_name歌手, help_text请选择歌手)# 设置与单曲表关联外键 多对多Singe models.ManyToManyField(Singe, verbose_name单曲, help_text请选择单曲)def save(self, force_insertFalse, force_updateFalse, usingNone,update_fieldsNone): 重写save方法 处理单曲数和歌手专辑数 # 获取选中的单曲字典sing_set self.Singe.all()single_num len(sing_set)# 更新单曲数self.single_num single_num# 获取所属歌手专辑数album_num get_album_singler_num(self.singler_id)super().save()# 更新歌手表-专辑数Singler.objects.filter(pkself.singler_id).update(album_numalbum_num) 总结 对后台单曲模块进行部分功能优化主要通过新增编辑和列表两方面来进行优化。