Django实现音乐网站 ⑹

news2024/12/30 3:33:23

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

本篇主要是在添加编辑过程中对后台歌手功能优化及表模型名称修改、模型继承内容。

 

目录

表模型名称修改

模型继承

创建抽象基类

其他模型继承

更新表结构

歌手新增、编辑优化

表字段名称修改

隐藏单曲数和专辑数

姓名首字母

安装xpinyin

获取姓名首字母

重写保存方法

歌手列表页优化

图片显示处理

引入函数

路径改为显示图片

修改列表默认设置

修改列表排序

总结


表模型名称修改

如果要自定义这个名称,可以在Model的Meta中声明:

内容如下:

class Singler(models.Model):
    """ 歌手表模型 """

    class Meta:
        verbose_name = '歌手'
        verbose_name_plural = '歌手'

效果:

然后把其他表模型都改一下名称,就不再详述。

 

模型继承

创建一个抽象基类,可以把其他数据模型的公共信息放入基类中;然后当这个抽象基类被其他模型类继承后,其字段会自动添加到子类中。

创建抽象基类

class BaseModel(models.Model):
    """ 设置基础模型类 """

    addtime = models.DateTimeField(auto_now_add=True)
    updatetime = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

 

其他模型继承

歌手、单曲、专辑、歌单表模型继承基类模型,并去掉addtime、updatetime字段设定。

class Singler(BaseModel):
class Singe(BaseModel):
class Album(BaseModel):
class SongSheet(BaseModel):

更新表结构

python manage.py makemigrations
python manage.py migrate

歌手新增、编辑优化

表字段名称修改

新增、编辑页面字段显示为数据表设计字段,改为中文显示。

在Model中直接修改Singler字段,增加verbose_name参数。

verbose_name(类型:Field.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(类型:Field.editable):默认值为True(真);

如果值为假,则在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 Pinyin


def 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.name

    get_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']

总结

本篇主要是在添加编辑过程中对后台歌手功能优化及表模型名称修改、模型继承内容。

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

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

相关文章

Redis 单线程VS多线程

面试题 redis到底是单线程还是多线程&#xff1f;IO多路复用是什么&#xff1f;redis为什么快&#xff1f; Redis单线程 是什么 Redis的版本很多3.x、4.x、6.x&#xff0c;版本不同架构也是不同的&#xff0c;不限定版本问是否单线程也不太严谨。 1、版本3.x &#xff0c;最…

中外人工智能专家共话大语言模型与 AI 创新

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 智源社区活动&#xff0c;中外人工智能专家共话大语言模型与 AI 创新。 对谈书目&#xff1a; 《大模型时代》&#xff0c;龙志勇、黄雯 著&#xf…

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…

软件测试方案模板

第一章 概述 ​ 软件的错误是不可避免的&#xff0c;所以必须经过严格的测试。通过对本软件的测试&#xff0c;尽可能的发现软件中的错误&#xff0c;借以减少系统内部各模块的逻辑&#xff0c;功能上的缺陷和错误&#xff0c;保证每个单元能正确地实现其预期的功能。检测和排…

docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)

目录 docker端口映射详解 一、端口映射概述&#xff1a; 二、案例实验&#xff1a; 1、-P选项&#xff0c;随机端口 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port&#xff0c;任意地址的指定端口 Local_IP:Local_Port:Container_Port 映射到指定地…

亚马逊买家号付款异常被锁定是什么原因?怎么解决?

如果在亚马逊上&#xff0c;买家号出现付款异常&#xff0c;可能会导致账号被锁定或受限。这通常是为了保护消费者和卖家的利益&#xff0c;以及防范欺诈行为。 1、常见的买家号付款异常情况可能包括&#xff1a; 付款信息不一致&#xff1a;如果买家提供的付款信息与其账号信…

第三章 图论 No.2单源最短路之虚拟源点,状压最短路与最短路次短路条数

文章目录 1137. 选择最佳线路1131. 拯救大兵瑞恩1134. 最短路计数383. 观光 dp是特殊的最短路&#xff0c;是无环图&#xff08;拓扑图&#xff09;上的最短路问题 1137. 选择最佳线路 1137. 选择最佳线路 - AcWing题库 // 反向建图就行 #include <iostream> #include…

再续AM335x经典,米尔TI AM62x核心板上市,赋能新一代HMI

近十年来&#xff0c;AM335x芯片作为TI经典工业MPU产品&#xff0c;在工业处理器市场占据主流地位&#xff0c;其凭借GPMC高速并口、PRU协处理器等个性化硬件资源&#xff0c;在工业控制、能源电力、轨道交通、智慧医疗等领域广受用户欢迎。随着信息技术的快速发展&#xff0c;…

Java实现数据库表中的七种连接【Mysql】

Java实现数据库表中的七种连接【Mysql】 前言版权推荐Java实现数据库表中的七种连接左外连接右外连接其他连接 附录七种连接SQL测试Java测试转换方法类 Cla1类 Cla2类Cla3 最后 前言 2023-8-4 16:51:42 以下内容源自《【Mysql】》 仅供学习交流使用 版权 禁止其他平台发布时…

ARCGIS地理配准出现的问题

第一种。已有省级行政区矢量数据&#xff0c;在网上随便找一个相同省级行政区图片&#xff0c;利用地理配准工具给图片添加坐标信息。 依次添加省级行政区选择矢量数据、浙江省图片。 此时&#xff0c;图层默认的坐标系与第一个加载进来的省级行政区选择矢量数据的坐标系一致…

opencv基础40-礼帽运算(原始图像减去其开运算)cv2.MORPH_TOPHAT

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能够获取图像的噪声信息&#xff0c;或者得到比原始图像的边缘更亮的边缘信息。 例如&#xff0c;图 8-22 是一个礼帽运算示例&#xff0c;其中&#xff1a; 左图是原始图像。中间的图是开运算图像。右图是原始图像减开运…

人工智能的最新进展:2024年将会发生什么?

文章目录 2024年AI最新发展2024年AI具体应用2024年AI的具体预测 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#…

滥⽤合法商⽤程序⽤以进⾏访问控制

背景 攻击对抗日益激烈的局势下&#xff0c;安全产品的围追堵截使得攻击者将目光逐渐转向合法工具的滥用。通过使用具有合法签名的应用程序进行访问控制可以有效提高攻击隐匿性&#xff0c;也对防守及检测提出新的挑战。本文以Vscode、AnyDesk、GotoAssist为例探索攻击者用于访…

海外热门地区/国家常见主体证件示例

海外热门地区/国家常见主体证件示例&#xff08;本页面内容较多&#xff0c;你可以通过CtrlF搜索&#xff09; Overseas Popular Areas / Countries Examples of Common certificates &#xff08;This page has more content, you can search by CtrlF&#xff09; 中国香港…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig-zag/左右双旋/3+4重构)

目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 00.BBST——平衡二叉搜索树 本文是介绍众多平衡二叉搜…

Sui的赞助交易(gas代付),打开Web2用户丝滑使用Web3之路

Sui Move包括一个功能&#xff0c;允许开发者为其应用程序的一些或全部交易支付gas费&#xff0c;消除了用户在进入Web3时面临的一个最大障碍。在Web3网络中&#xff0c;通常用户需要支付所谓的 gas费才能使用应用程序。Sui的赞助交易功能为愿意采用的开发者消除了这种阻碍。 …

仓库管理系统有哪些功能,如何对仓库进行有效管理

阅读本文&#xff0c;您可以了解&#xff1a;1、仓库管理系统有哪些功能&#xff1b;2、如何对仓库进行有效管理。 仓库是制造业的开端&#xff0c;原材料的领料开始。企业的仓库管理是涉及企业生产、企业资金流和企业的经营风险的关键环节。在众多的工业企业、制造型企业、贸…

都市信息供求网servlet+jsp新闻广告出售java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 都市信息供求网servletjsp 系统1权限&#xff1a;管理…

怎么做自动化测试?8年测试老鸟自动化测试总结,史上最全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、为什么做自动化…

AutoML工具-AutoGluon

1、简介 AutoGluon是AutoML的自动化工具&#xff0c;涉及方面有图像、文本、时间序列和表格式数据。 2、入门 2.1 安装 pip install autogluon 2.2 使用 &#xff08;1&#xff09;Tabular&#xff08;解释是表格式数据&#xff0c;不知道对不对&#xff09; 两个函数Ta…