Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站,

本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。

目录

歌曲类型功能优化

新增编辑

优化输入项标题显示

父类型显示改为下拉菜单

列表显示

父类型显示名称

过滤器增加父类型

歌单表功能优化

新增编辑

单曲选项增加歌手名称

歌单类型选项名称修改

字段显示名称修改

播放量改为不可编辑

歌单增加描述字段

首先表模型中增加描述字段

执行表迁移

列表显示

显示播放量、添加时间

显示编辑时间、歌单描述

歌单封面改为显示图片

总结


歌曲类型功能优化

新增编辑

优化输入项标题显示

把显示字段名称改为显示名称

内容如下:

class SongCategory(models.Model):""" 歌曲类型表 """class Meta:verbose_name = '歌曲类型'verbose_name_plural = '歌曲类型'name = models.CharField('类型名称', max_length=100, help_text='请输入类型名称')pid = models.IntegerField('父类型id', default=0, help_text='父类型')

效果:

父类型显示改为下拉菜单

父类型字段增加choice参数,就可变成下拉菜单选项,需要注意字段类型为tuple。

内容如下:

categoryChoice = [(0, '默认'), (1, '主题'), (2, '心情'),(3, '场景'),(4, '年代'),(5, '曲风流派'), (6, '语言')
]
pid = models.IntegerField('父类型', default=0, help_text='父类型',choices=categoryChoice
)

效果:

原本想做成表模型调用自己的父类型组成列表来展示和添加;结果发现表模型没创建时候,这个表模型是不存在的,也就无法调用,暂时先做成固定父类型,添加子类型。

列表显示

父类型显示名称

默认显示父类型是类型id,改为显示类型名称。

修改player/admin.py中的歌曲类型后台类中对pid字段返回内容。

class SongCategoryAdmin(admin.ModelAdmin):""" 后台歌单类型类 """def get_name(self):return self.nameget_name.short_description = '类型名称'def get_pid(self):categoryChoice = [(0, '默认'),(1, '主题'),(2, '心情'),(3, '场景'),(4, '年代'),(5, '曲风流派'),(6, '语言')]for index, item in categoryChoice:if index == self.pid:return itemget_pid.short_description = '父类型'

效果:

过滤器增加父类型

过滤器中增加pid字段设置,可以设置在name的前面。

内容如下:

list_filter = ['pid', 'name']

效果:

歌单表功能优化

新增编辑

单曲选项增加歌手名称

修改单曲表字符串返回格式。

内容如下:

class Singe(BaseModel):""" 单曲表 """......def __str__(self):return str(self.name) + ' - ' + str(self.singler)

效果:

歌单类型选项名称修改

默认显示对象,需要修改歌曲类型表模型类,增加__str__方法,设置返回格式。

内容如下:

def __str__(self):return self.name

效果:

字段显示名称修改

默认显示字段名称,需要改成字段表述的内容,这样便于理解和编辑。

 

修改player/models.py中歌单表模型类,设置字段的verbose_name属性。

内容如下:

class SongSheet(BaseModel):""" 歌单表 """class Meta:verbose_name = '歌单'verbose_name_plural = '歌单'name = models.CharField('歌单名称', max_length=100, help_text='请输入歌单名称')cover = models.ImageField('歌单封面图',upload_to=upload_save_path, help_text='请上传歌单封面图')playnum = models.IntegerField('播放量', default=0, help_text='请输入播放量')is_default = models.IntegerField('默认', default=0, choices=[('0', '是'), ('1', '否')], help_text='是否默认')# 歌曲类型与歌单表 多对多关系category = models.ManyToManyField('SongCategory', verbose_name='所属类型')# 歌单表与单曲表多对多关系singe = models.ManyToManyField('Singe', verbose_name='包含单曲')

效果:

播放量改为不可编辑

播放量是由前端查看歌单后增加数量,后台不能编辑。

需要设定播放量字段的editable为False。

内容如下:

playnum = models.IntegerField(default=0, editable=False)

保存后,新增和编辑中播放量填写项不再显示。

歌单增加描述字段

刚发现设计表时候没有歌单描述字段,现在加上。

首先表模型中增加描述字段

内容如下:

esc = models.TextField('歌单描述', default='', max_length=200, help_text='请输入歌单描述')

注意:需要设置默认,否则无法执行。

执行表迁移

表模型发生改变后,需要创建表迁移文件和执行表迁移。

python manage.py makemigrations
python manage.py migrate

数据表增加desc字段

列表显示

显示播放量、添加时间

显示编辑时间、歌单描述

修改player/admin.py中歌单表后台类。

内容如下:

class SongSheetAdmin(admin.ModelAdmin):""" 后台歌单类 """def get_name(self):return self.nameget_name.short_description = '类型名称'def get_cover(self):return format_html('<img src="/media/{}" width="100px" height="100px"/>',self.cover,)get_cover.short_description = '歌单封面'def get_desc(self):return self.descget_desc.short_description = '歌单描述'def get_playnum(self):return self.playnumget_playnum.short_description = '播放量'def get_addtime(self):return self.addtimeget_addtime.short_description = '创建时间'def get_updatetime(self):return self.updatetimeget_updatetime.short_description = '编辑时间'# 显示字段list_display = ['id', get_name, get_cover, get_desc, get_playnum, get_addtime, get_updatetime]

效果:

歌单封面改为显示图片

修改player/admin.py中歌单表后台类;把封面方法返回内容改为img元素。

内容如下:

def get_cover(self):return format_html('<img src="/media/{}" width="100px" height="100px"/>',self.cover,)

 效果:

总结

至此后台功能开发和优化算基本完成,之后开始前端方面开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系

X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系 很多人对于他们是啥是傻傻分不清的&#xff0c;我做了个表格供大家参考。 摘抄&#xff1a; X11是X Window System Protocol, Version 11&#xff08;RFC1013&#xff09;&#xff0c;是X server和X client之间的通…

Android多渠道打包+自动签名工具 [原创]

多渠道打包自动签名工具 [原创] github源码&#xff1a;github.com/G452/apk-packer 如果觉得有帮助可以点个小星星支持一下&#xff0c;万分感谢&#xff01; 使用步骤&#xff1a; 1、在apk-packer.exe目录内放入打包需要的配置&#xff1a; 1&#xff09;签名文件.jks2&am…

各种变形链表(循环链表、双向链表、带头结点的链表等)的表示和基本操作的实现

目录 双向链表双链表的插入操作双链表的删除操作 循环链表循环双链表静态链表 双向链表 单链表节节点中只有一个指向其后继的指针&#xff0c;使得单链表只能从头结点一次顺序的向后遍历。要访问某个记得点的前驱结点&#xff08;插入、删除操作时&#xff09;&#xff0c;只能…

flutter开发实战-just_audio实现播放音频暂停音频设置音量等

flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放&#xff0c;这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上&#xff0c;video_p…

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol 0. 版本0.1 ERC165Checker.sol 1. 目标合约2. 代码精读2.1 supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId)2.2 supportsERC165(address account)2.3 supportsInterface(address acc…

Upgrading to WebSocket events.js:352 报错问题

将http-proxy-middleware升级到0.20.0就行了 安装依赖 npm install http-proxy-middleware npm install --save-dev http-proxy-middleware 通过express来使用该中间件&#xff0c;安装expressnpm install express 在demo文件夹下创建server.js文件作为代理使用 在demo文件…

【Express.js】全面鉴权

全面鉴权 这一节我们来介绍一下 Passport.js&#xff0c;这是一个强大的 NodeJS 的认证中间件 Passport.js 提供了多种认证方式&#xff0c;账号密码、OpenID、ApiKey、JWT、OAuth、三方登录等等。 使用 Passport.js 认证要配置三个部分&#xff1a; 认证策略中间件会话 接…

springboot整合JMH做优化实战

这段时间接手项目出现各种问题&#xff0c;令人不胜烦扰。吐槽下公司做项目完全靠人堆&#xff0c;大上快上风格注定留下一地鸡毛&#xff0c;修修补补不如想如何提升同事代码水准免得背锅。偶然看到关于JMH对于优化java代码的直观性&#xff0c;于是有了这篇文章&#xff0c;希…

乐鑫科技2021笔试题

笔试时间&#xff1a;2020.09.09&#xff0c;10&#xff1a;00-11&#xff1a;30 岗位&#xff1a;嵌入式软件工程师 题型&#xff1a;单选题20道&#xff0c;40分。编程题2道&#xff0c;60分。 单选题 1、算术右移指令执行的操作是&#xff1f;符号位会变化吗&#xff1f…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;drawio-desktop 21.6.5 更新时间&#xff1a;2023年7月22日 工具简介 开源绘图工具&#xff0c;用Electron编写&#xff0c;…

sql 语句 字段字符串操作

substring_index() 函数 字符串截取 表达式&#xff1a;substring_index(column,str,count) 释义&#xff1a;截取字符串column&#xff0c;str出现从前往后数第count次&#xff0c;之前的所有字符 示例语句&#xff1a;SELECT substring_index(‘www.baidu.com’,‘.’,2) 结…

uniapp文件下载并预览

大概就是这样的咯&#xff0c;文件展示到页面上&#xff0c;点击文件下载并预览该文件&#xff1b; 通过点击事件handleDownLoad(file.path)&#xff0c;file.path为文件的地址&#xff1b; <view class"files"><view class"cont" v-for"(…

[Leetcode] [Tutorial] 二分查找

文章目录 35. 搜索插入位置Solution 74. 搜索二维矩阵Solution 34. 在排序数组中查找元素的第一个和最后一个位置 35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被…

PPO和文本生成

策略梯度 策略梯度&#xff08;Policy Gradient&#xff09;方法梯度的计算如下&#xff1a; E ( a t , s t ) ∈ π θ [ A ^ t ∇ θ log ⁡ π θ ( a t ∣ s t ) ] \mathbb E_{(a_t,s_t) \in \pi_\theta}[\hat A_t \nabla_ \theta \log \pi_\theta(a_t | s_t)] E(at​,st…

Nginx的重定向

URI&#xff1a;统一资源标识符&#xff0c;是一种字符串标识&#xff0c;主要是用于标识抽象的或者是物理资源&#xff08;主要是指一些文件视频等等&#xff09; 常用的Nginx正则表达式 ^ 匹配输入字符串的起始位置&#xff08;以......开头&#xff09; $ 匹配输入…

07 |「广播接收器 」

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言一、二、实践1、发送和接收系统广播2、发送和接收自定义广播 一、 广播是 Android 系统和 Android 应用程序在发生可能影响其他应用程序组件功能的事件时发送的消息&#xff1b;广播是Android系统中的一种进程…

FreeRTOS( 任务与中断优先级,临界保护)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、中断优先级 1、NVIC基础知识 2、FreeRTOS配置NVIC 3、SVC、PendSV、Systick中断 4、不受FreeRTOS管理的中断 5、STM32CubeMX配置 二、任务优先级 1、任务优先级说明 2、任务…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

保姆级Arcgis安装图文安装教程

参考视频&#xff1a;【钟老师arcGIS从放弃到入门】02软件下载与安装_哔哩哔哩_bilibili 安装包在视频简介中有 注释&#xff1a;安装过程中有犯错误&#xff0c;请耐心看完一遍再跟着操作 &#xff08;一&#xff09;安装包下载 下载视频中分享的压缩包(压缩包密码&#x…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平…