Django实现音乐网站 ⑺
使用Python Django框架制作一个音乐网站,
本篇主要是后台对歌手原有实现功能的基础上进行优化处理。
目录
新增编辑
表字段名称修改
隐藏单曲、专辑数
姓名首字母
安装xpinyin
获取姓名首字母
重写保存方法
列表显示
图片显示处理
引入函数
路径改为显示图片
修改列表默认设置
修改列表排序
总结
新增编辑
表字段名称修改
新增、编辑页面字段显示为数据表设计字段,改为中文显示。
在Model中直接修改Singler字段,增加verbose_name参数。
verbose_name:admin模式中字段的显示名称。
内容如下:
class Singler(models.Model):""" 歌手表模型 """class Meta:verbose_name = '歌手'verbose_name_plural = '歌手'name = models.CharField(max_length=50, help_text='请输入歌手名称', verbose_name='姓名')first_letter = models.CharField(max_length=15, help_text='请输入歌手名称首字母', verbose_name='姓名首字母')# 设置上传位置portrait = models.ImageField(upload_to=upload_save_path, help_text='请上传歌手照片', verbose_name='照片')birthday = models.DateField(default=date.today, help_text='请选择歌手生日', blank=True, verbose_name='生日')height = models.IntegerField(help_text='请输入歌手身高(cm)', default=0, blank=True, verbose_name='身高(cm)')weight = models.IntegerField(help_text='请输入歌手体重(kg)', default=0, blank=True, verbose_name='体重(kg)')constellation = models.CharField(max_length=50, help_text='请输入歌手星座', verbose_name='星座')# editable=False 后台将不再显示single_num = models.IntegerField(default=0, editable=False)album_num = models.IntegerField(default=0, editable=False)desc = models.TextField(help_text='请输入歌手简介', verbose_name='简介')
效果:

隐藏单曲、专辑数
歌手所拥有的单曲数和专辑数,应该是添加、删除单曲或专辑时动态计算出的数值,不应该是后台添加的,之前不会隐藏,经过查看表模型参数找到了设置方法。
editable:默认值为True;
如果值为Fasle,则在admin模式下不能改写。
修改歌手表模型单曲数和专辑数字段,设置editable参数。
内容如下:
single_num = models.IntegerField(default=0, editable=False)
album_num = models.IntegerField(default=0, editable=False)
刷新后,新增歌手详情单曲数和专辑数设置不再显示。
姓名首字母
原有姓名首字母需要自己手动输入,改为程序自动通过输入的歌手名称取得姓名首字母。
安装xpinyin
需要下载三方库,安装命令:
pip install xpinyin
获取姓名首字母
在player/models.py中处理获取首字母并设置入库操作。
from xpinyin import Pinyindef get_first_letter(name):""" 获取姓名中的首字母 """obj = Pinyin()name_pinyin = obj.get_pinyin(name, '')return name_pinyin[0]
重写保存方法
在Singler类中,重写父类保存方法,增加设置歌手姓名首字母。
并把首字母字段设置为admin不可编辑。
class Singler(models.Model):""" 歌手表模型 """......def save(self, force_insert=False, force_update=False, using=None,update_fields=None):""" 重写save方法 """self.first_letter = get_first_letter(self.name)super().save()
列表显示
图片显示处理
修改后台歌手表,在player中的admins.py中的SinglerAdmin。
需要使用format_html()函数。
引入函数
from django.utils.html import format_html
路径改为显示图片
class SinglerAdmin(admin.ModelAdmin):# 列表页属性def get_name(self):return self.nameget_name.short_description = '歌手名称'def get_portrait(self):return format_html('<img src="/{}" width="100px" height="100px"/>',self.portrait,)
原因:django从view向template传递HTML字符串的时候,django默认不渲染此HTML,原因是为了防止这段字符串里面有恶意攻击的代码。所以要把列表的图片路径改为显示图片,需要使用函数,通过函数的{}占位符,把图片路径赋值给HTML元素img。
效果:

修改列表默认设置
适用于列表某字段为空时,设置显示内容。
比如歌手的身高体重都为默认0时。

修改player/admin.py中对身高和体重的显示处理。
内容如下:
def get_height(self):if self.height < 1:return '——'else:return str(self.height) + 'cm'get_height.short_description = '身高'def get_weight(self):if self.weight < 1:return '——'else:return str(self.weight) + 'kg'
效果:

修改列表排序
通过Meta类来给模型赋予元数据,设定ordering排序。
class Singler(models.Model):""" 歌手表模型 """class Meta:verbose_name = '歌手'verbose_name_plural = '歌手'# 正序ordering = ['first_letter']# 倒序# ordering = ['-first_letter']
总结
对后台歌手模块进行部分功能优化,主要通过新增编辑和列表两方面来进行优化。
相关文章:
Django实现音乐网站 ⑺
使用Python Django框架制作一个音乐网站, 本篇主要是后台对歌手原有实现功能的基础上进行优化处理。 目录 新增编辑 表字段名称修改 隐藏单曲、专辑数 姓名首字母 安装xpinyin 获取姓名首字母 重写保存方法 列表显示 图片显示处理 引入函数 路径改为显示…...
PO、DTO和VO的区别
PO:Persistence Object,是持久化对象,也叫实体对象(Entity),是对象到关系表的映射。在关系型数据库中,每张表对应着一个PO,PO 中的属性值与表中数据一一对应,通过数据访问…...
ReadableStream流的js处理
需求 今天接了一个gpt的项目。需要对接接口。后端返回的数据是ReadableStream类型的。记录下如何处理ReadableStream类型的数据 代码 const response ... // response 是服务端返回的数据// 创建了一个数据读取器 const reader response.getReader(); // 创建了一个文本解…...
图扑软件入选 2023 中国信通院“铸基计划”全景图
7 月 27 日,由中国信通院主办的“2023 数字生态发展大会”暨中国信通院“铸基计划”年中会议在北京召开。本次大会重磅发布了《高质量数字化转型产品及服务全景图(2023 上半年度)》。图扑软件凭借自研 HT for Web 数字孪生可视化产品成功入选…...
Go Fyne:一种现代的,跨平台的 GUI 开发工具集
Fyne 是一个用 Go 语言写的,提供丰富,现代化的用户界面(UI)的开发工具集。Fyne 提供了一种简单而直观的方式来构建应用程序,并且注意到它是跨平台的,可以在 Windows,macOS,Linux&…...
React Dva 操作models中的subscriptions讲述监听
接下来 我们来看一个models的属性 之前没有讲到的subscriptions 我们可以在自己有引入的任意一个models文件中这样写 subscriptions: {setup({ dispatch, history }) {console.log(dispatch);}, },这样 一进来 这个位置就会触发 这里 我们可以写多个 subscriptions: {setup…...
标准化归一化 batch norm, layer norm, group norm, instance norm
Layer Normalization - EXPLAINED (in Transformer Neural Networks) Layer Normalization - EXPLAINED (in Transformer Neural Networks) 0~4min:什么是multi-head attention 5~7min:layer norm图示 7~9min:公式举例layer norm 9:54-end:layer norm的代码示例 group n…...
Zabbix监控系统详解及配置
前言 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行浏览整个网站所有的服务…...
【100天精通python】Day29:文件与IO操作_XML文件处理
目录 专栏导读 一、XML文件概述 1. 标签和元素 2. 嵌套结构 3. 属性 4. 命名空间 5. CDATA节 6. 注释 7. 验证与验证语言 8. 扩展性 二、XML文件处理常见操作 1. 解析XML文件 2. 创建和编辑XML文件 3. 修改XML文件 4. 查询XML元素 5 遍历XML元素 6. 删除XML元…...
人工智能的未来:探索下一代生成模型
推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 生成式 AI 目前能够做什么,以及探索下一波生成式 AI 模型需要克服的当前挑战? 如果你跟上科技世界的步伐,你就会知道生成式人工智能是最热门的话题。我们听到了很多关于…...
C++ 运算符重载为非成员函数
运算符也可与重载为非成员函数。这时运算所需要的操作数都需要通过函数的形参表来传递,在形参表中形参从左到右的顺序就是运算符操作数的顺序。如果需要访问运算符参数对象的私有成员,可以将该函数声明为友元函数。 【提示】不用机械地将重载运算符的非…...
[国产MCU]-BL602开发实例-定时器
定时器 文章目录 定时器1、BL602定时器介绍2、定时器驱动API介绍3、定时器使用实例3.1 单次计时3.2 持续计时通用定时器,用于定时,当时间到达我们所设置的定时时间会产生定时中断,可以用来完成定时任务。本文将详细介绍如何使用BL602的定时器功能。 1、BL602定时器介绍 BL6…...
re学习(29)攻防世界-CatFly(复原反汇编)
因为这是一个.dll文件,在Linux上运行一下: 找到主要函数:(以及由上面三部分对应的代码部分) __int64 __fastcall main(int a1, char **a2, char **a3) {size_t v3; // rbx__int16 v5[4]; // [rsp10h] [rbp-4B0h] B…...
Android WIFI-概率性不能自连
1.连上wifi时同步保存wifi密码,避免连上wifi后马上断电重启由于密码没保存导致不能自动重连wifi packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java @@ -66,6 +66,7 @@ import com.android.server.wifi.WifiNative.SupplicantDeathEve…...
用Python批量复制文件,方法有9种,方便快捷
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 当我们复制一个文件时用复制粘贴就可以了,如果是多个文件呢? 就会很麻烦了! 今天给大家介绍一下用Python批量复制文件,方法有九种!希望对你有帮助 1. Shutil Copy…...
《凤凰架构》第一章——服务架构演进史
前言 刚开始决定弄懂文中所提到的所有东西,就像我写ByteByteGo呢几篇文章一样,把每一句话都弄懂。但是对于《凤凰架构》来说,这有点太费时间了,并且没有必要,有些东西可能永远都不会用到,但文章为了全面的…...
【iPhone】手机还有容量,拍视频却提示 iPhone 储存空间已满
文章目录 前言解决方案 结语 前言 今天在用 iPhone 录像的时候突然提醒我 iPhone储存空间已满 你没有足够的储存空间来录制视频” 可我明明还有 20G 的容量 我非常疑惑,因为我之前还剩1个G都能录像,现在20G反而不行了,于是重启了手机&#…...
pycharm中opencv库导入 cv2. 无函数提示跳出解决方法
pycharm中opencv库导入 cv2. 无函数提示跳出解决方法 1、找到当前解释器安装目录 例如: 2、进入D:\Python37\Lib\site-packages\cv2文件,进入cv2文件夹: 找到cv2.pyd, 把cv2.pyd复制一份,放到上层文件夹下,即site-p…...
week3
题解: 前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子树 ] 排序。 中序遍历性质: 节点按照 [ 左子树 | 根节点 | 右子树 ] 排序。 通过以上三步,可确定 三个节点 :1.树的根节点、2.左子树根节点、3.右子树根节点。 之后进行…...
LeetCode28.找出字符串中第一个匹配项的下标
28.找出字符串中第一个匹配项的下标 目录 28.找出字符串中第一个匹配项的下标题目描述解法一:朴素的模式匹配解法二:KMP算法KMP解决的问题类型最长公共前后缀KMP算法过程next数组的构建代码实现 题目描述 给你两个字符串haystack和needle,请…...
demo-magic常见问题解决:pv工具安装和终端兼容性完全指南
demo-magic常见问题解决:pv工具安装和终端兼容性完全指南 【免费下载链接】demo-magic A handy shell script that enables you to write repeatable demos in a bash environment. 项目地址: https://gitcode.com/gh_mirrors/de/demo-magic demo-magic是一个…...
QLC SSD可靠性提升:LDPC软判决与智能固件如何实现低开销加固
1. 项目概述:当QLC成为主流,可靠性成了“房间里的大象”如果你最近关注过固态硬盘市场,或者自己动手组装过电脑,大概率会注意到一个趋势:QLC闪存颗粒的硬盘越来越多了,而且价格越来越香。从大厂的消费级产品…...
跨平台包管理新思路:paks项目如何统一软件安装体验
1. 项目概述:一个轻量级、跨平台的包管理新思路如果你和我一样,常年混迹在开发运维一线,肯定对“包管理”这件事又爱又恨。爱的是,它能让我们一键安装、更新、卸载软件,省去了手动编译、配置依赖的繁琐;恨的…...
深度测评2026广州个体户核定流程精选榜单,革新个体工商户税务办理新变革
在数字经济浪潮席卷之下,个体工商户税务办理正面临前所未有的变革压力与机遇窗口。2026年的广州,作为电商与直播产业的高地,其个体户核定流程的效率与合规性,已成为衡量区域营商环境的试金石。然而,一个深层的价值悖论…...
风云T9长续航正式上市,限时红包价仅10.99万元起售
5月16日,超长续航智享SUV——风云T9长续航正式上市,上市指导价为11.99万元-13.99万元,限时红包价10.99万元起售。新车秉持“智电全能,超级进阶”的理念,基于全球超15万用户真实需求,围绕设计、续航、智能、…...
5个步骤掌握ModEngine2:魂类游戏模组开发的终极解决方案
5个步骤掌握ModEngine2:魂类游戏模组开发的终极解决方案 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 你是否曾想过为《黑暗之魂3》或《艾尔登法环》这样的…...
从动态规划到最优策略:基于模型的强化学习核心算法剖析
1. 从动态规划到强化学习的桥梁 动态规划(Dynamic Programming,DP)是解决序列决策问题的经典方法,而强化学习(Reinforcement Learning,RL)则可以看作是在未知环境下的动态规划。我第一次接触这个…...
抖音弹幕抓取神器:5分钟快速上手与深度应用指南
抖音弹幕抓取神器:5分钟快速上手与深度应用指南 【免费下载链接】DouyinBarrageGrab 基于系统代理的抖音弹幕wss抓取程序,能够获取所有数据来源,包括chrome,抖音直播伴侣等,可进行进程过滤 项目地址: https://gitcod…...
ADAU1701(含A2B)的开发详解五:SigmaStudio实战技巧与模块高效应用
1. SigmaStudio模块查找的终极技巧 第一次打开SigmaStudio时,面对左侧密密麻麻的模块列表,我完全懵了。就像走进一个巨大的图书馆却找不到分类标签,ADI把200多个算法模块分散在30多个分类里,光Volume Controls下面就有12种音量调节…...
STM32CubeMX生成代码后,Keil编译烧写的那些“隐藏”步骤与调试器避坑
STM32CubeMX生成代码后,Keil编译烧写的那些“隐藏”步骤与调试器避坑 当你用STM32CubeMX生成代码后,以为万事大吉,结果在Keil里编译烧写时却频频碰壁——这几乎是每个STM32开发者都会经历的“成人礼”。那些教程里一笔带过的“编译”、“烧写…...
