当前位置: 首页 > news >正文

Django实现音乐网站 ⒀

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

本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。

目录

推荐页开发

推荐排行榜

单曲表增加播放量

表模型增加播放量字段

执行表操作

模板中显示外键对应值

表模型外键设置

获取外键对应模型值

推荐排行榜视图

推荐排行榜模板

推荐歌手

推荐歌手视图

推荐歌手模板

总结


推荐页开发

推荐排行榜

排行榜这个功能后期在做吧,比较麻烦,目前先做一个模拟的排行榜数据返回。

单曲表增加播放量

做歌曲排行榜才发现歌曲表没有播放量字段。

表模型增加播放量字段

在player/models.py单曲表中增加播放量字段。

内容如下:

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

执行表操作
python manage.py makemigrations
python manage.py migrate

执行过程

模板中显示外键对应值

在模板中显示外键对应值很关键,在python中有特殊的方法,开始时我还是按照以前的方式去显示,即先获取A表模型中所有名称组成一个一维的列表,然后获取B表模型数据,在一个循环中使用B模型与A模型对应外键,取相应值并赋值,最终组成一个新的二维对象类型数据返回给模版,结果模版解析不了二维对象。

之后直接返回A模型所有名称的一维列表,在模板的for循环中使用B表模型中对应A模型外键直接解析,还是不行!

最终在网上找了好多文章,才从其中一个找到端倪;其实这个问题一点也不复杂,因为Django中已经给做好了,不用再做关键模型赋值操作,其他文章没写是因为一旦会了就不觉得是问题,但是不会真的百思不得其解,在这里记录一下吧。

表模型外键设置
# 设置与歌手表关联外键 一对多外键设置在多的模型中
singler = models.ForeignKey("Singler",on_delete=models.CASCADE,verbose_name='歌手',help_text='请选择歌手'
)
获取外键对应模型值
{% for hot in hot_ranks %}{{ hot.singler.name }}
{% endfor %}

推荐排行榜视图

在原来的推荐歌单数据查询下增加推荐排行榜查询处理。

def index(request):""" 显示首页 """......# 推荐排行榜# 热歌榜 取播放量最多的五个hot_ranks = Singe.objects.order_by('-playnum').all()[0:5]# 新歌榜 取最新的五个new_ranks = Singe.objects.order_by('-id').all()[0:5]# 飙升榜biao_ranks = Singe.objects.order_by('id').all()[0:5]# 欧美榜ea_ranks = Singe.objects.order_by('-id').all()[0:5]# 日韩榜js_ranks = Singe.objects.order_by('id').all()[0:5]return render(request, 'index/index.html', {'carousels': carousel_imgs,'songsheets': songsheets,'hot_ranks': hot_ranks,'new_ranks': new_ranks,'biao_ranks': biao_ranks,'ea_ranks': ea_ranks,'js_ranks': js_ranks})

推荐排行榜模板

<!--推荐排行榜开始-->
<div class="recommend_rank"><div class="title"><div class="name">推荐排行榜</div><ul><li><a href="#">更多></a></li></ul></div><div class="list"><div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/b1.png' %}" alt=""></div><img class="img_bg" src="{% static 'images/b1_1.jpg' %}" alt=""></div><ul class="bank_list">{% for hot in hot_ranks %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name">{{ hot.name }}</p><p class="singler">{{ hot.singler.name }}</p></div></li>{% endfor %}</ul></div><div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/b2.png' %}" alt=""></div><img class="img_bg" src="{% static 'images/b2_2.jpg' %}" alt=""></div><ul class="bank_list">{% for news in new_ranks %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name">{{ news.name }}</p><p class="singler">{{ news.singler.name }}</p></div></li>{% endfor %}</ul></div><div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/b3.png' %}" alt=""></div><img class="img_bg" src="{% static 'images/b3_3.jpg' %}" alt=""></div><ul class="bank_list">{% for biao in biao_ranks %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name">{{ biao.name }}</p><p class="singler">{{ biao.singler.name }}</p></div></li>{% endfor %}</ul></div><div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/b4.png' %}" alt=""></div><img class="img_bg" src="{% static 'images/b4_4.jpg' %}" alt=""></div><ul class="bank_list">{% for ea in ea_ranks %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name">{{ ea.name }}</p><p class="singler">{{ ea.singler.name }}</p></div></li>{% endfor %}</ul></div><div class="bank"><div class="bank_top"><div class="img"><img class="img_tip" src="{% static 'images/b5.png' %}" alt=""></div><img class="img_bg" src="{% static 'images/b5_5.jpg' %}" alt=""></div><ul class="bank_list">{% for jss in js_ranks %}<li>{% if forloop.counter == 1 %}<div class="top_img top1"></div>{% elif forloop.counter == 2 %}<div class="top_img top2"></div>{% elif forloop.counter == 3 %}<div class="top_img top3"></div>{% else %}<div class="top_index">{{forloop.counter}}</div>{% endif %}<div class="top_info"><p class="song_name">{{ jss.name }}</p><p class="singler">{{ jss.singler.name }}</p></div></li>{% endfor %}</ul></div></div>
</div>
<!--推荐排行榜结束-->

推荐歌手

先定一个规则,取单曲最多的六位歌手。

推荐歌手视图

返回单曲最多的六位歌手,还是在原来的基础上增加歌手的查询并返回给模板。

代码如下:

def index(request):""" 显示首页 """......# 推荐歌手 取单曲最多的六个singlers = Singler.objects.order_by('-singe_num').all()[0:6]return render(request, 'index/index.html', {'carousels': carousel_imgs,'songsheets': songsheets,'hot_ranks': hot_ranks,'new_ranks': new_ranks,'biao_ranks': biao_ranks,'ea_ranks': ea_ranks,'js_ranks': js_ranks,'singlers': singlers})

推荐歌手模板

模板样式都已经写好了,只需要在循环中解析和赋值就可以了。

代码如下:

<!--推荐歌手开始-->
<div class="recommend_singler"><div class="title"><div class="name">推荐歌手</div><ul><li><a class="now" href="#">华语</a></li><li><a href="#">欧美</a></li><li><a href="#">日韩</a></li><li><a href="#">组合</a></li><li><a href="#">更多></a></li></ul></div><div class="list">{% for sg in singlers %}<div class="item"><div class="cover"><img src="/media/{{sg.portrait}}" alt=""></div><p class="name">{{sg.name}}</p><p class="num">{{sg.singe_num}}首歌曲</p></div>{% endfor %}</div>
</div>
<!--推荐歌手结束-->

总结

做推荐页开发暂时就这样了还是比较顺利的,只有在外键显示那边费了点事,还是对django部分不了解才导致的,这也是做项目的目的,能够比较全面的使用框架的功能,增进对框架的了解。

相关文章:

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…...

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后&#xff0c;紧接着于2020年12月10日发布了PySide 6&#xff0c;对应C版的Qt6。从PySide6开始&#xff0c;PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下&#xff0c;不兼容Windows7系统&#xff0c…...

算法通关村第九关——中序遍历与搜索树

1 中序遍历和搜索树原理 二叉搜索树按照中序遍历正好是一个递增序列。其比较规范的定义是&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若它的右子树不为空&#xff0c;则右子树所有节点的值均大于它的根节点的值&…...

测试框架pytest教程(5)运行失败用例-rerun failed tests

# content of test_50.py import pytestpytest.mark.parametrize("i", range(50)) def test_num(i):if i in (17, 25):pytest.fail("bad luck") 运行这个文件&#xff0c;2个失败&#xff0c;48个通过。 要运行上次失败的测试用例&#xff0c;可以使用--l…...

【车载开发系列】UDS当中的时间参数

【车载开发系列】UDS当中的时间参数 UDS当中的时间参数 【车载开发系列】UDS当中的时间参数一. 术语定义二. 网络层时间调整参数三. ECU诊断层与会话层参数 一. 术语定义 缩写全称中文说明BSBlock Size块大小STminSeparation time min时间间隙SIService Identifier服务标识符S…...

PDF中的表格怎么转换为Excel?这两个工具一定得收藏!

PDF是一种常见的文件格式&#xff0c;它可以保持文件的原始样式和内容&#xff0c;但是也有一些缺点&#xff0c;比如不易编辑和处理数据。如果你想要将PDF中的表格或数据导出到Excel中&#xff0c;以便进行分析、计算或制作图表&#xff0c;那么你可能需要一个专业的PDF转Exce…...

ssh scp sshpass

ssh命令用于远程连接主机 ssh usernamehostname更多用法参考&#xff1a; ssh常用用法 scp 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令 比如&#xff1a; scp /data/log/a.txt root192.168.1.100:/data/log该命令就就将本地的a.t…...

leetcode 1996. 游戏中弱角色的数量(排序的魅力)

题目 题意: 给定n个人的攻击力和防御力&#xff0c;对于一个人来说&#xff0c;如果存在某个人的攻击力和防御力都比他高&#xff0c;那么称这个人为弱角色。统计弱角色的数量 思路: 排序&#xff0c;攻击力按从大到小排序&#xff0c;这样遍历的时候某个数时前边的攻击力都比他…...

从头到尾说一次 Spring 事务管理(器) | 京东云技术团队

事务管理&#xff0c;一个被说烂的也被看烂的话题&#xff0c;还是八股文中的基础股之一。​ 本文会从设计角度&#xff0c;一步步的剖析 Spring 事务管理的设计思路&#xff08;都会设计事务管理器了&#xff0c;还能玩不转&#xff1f;&#xff09; 为什么需要事务管理&…...

php 系列题目,包含查看后端源代码

一、弱类型比较问题 原则&#xff1a; 1.字符串和数字比较&#xff0c;字符串回被转换成数字。 "admin" 0&#xff08;true) admin被转换成数字&#xff0c;由于admin是字符串&#xff0c;转换失败&#xff0c;变成0 int(admin)0,所以比较结果是ture 2.混合字符串转…...

令牌桶C语言代码实现

令牌桶实例 令牌桶三要素 cps 每秒钟传输字节数 burst 令牌桶内最多能传输的字节数&#xff0c;token的最大值 token 令牌的个数 之前是一个令牌(token)对应一个字节&#xff0c;现在将一个token变为一个cps&#xff0c;cps是解码速率&#xff0c;每攒到一个令牌&#xff…...

Mybatis 建立依赖失败:报错Dependency ‘mysql:mysql-connector-java:8.0.28‘ not found

Mybatis 建立依赖失败&#xff1a;报错Dependency ‘mysql:mysql-connector-java:8.0.28’ not found 解决办法&#xff1a; 写完依赖代码&#xff0c;直接重构&#xff0c;下载依赖。 图片: ![Alt](https://img-home.csdnimg.cn/images/20220524100510.png Mac 版本注意Ide…...

多线程+隧道代理:提升爬虫速度

在进行大规模数据爬取时&#xff0c;爬虫速度往往是一个关键问题。本文将介绍一个提升爬虫速度的秘密武器&#xff1a;多线程隧道代理。通过合理地利用多线程技术和使用隧道代理&#xff0c;我们可以显著提高爬虫的效率和稳定性。本文将为你提供详细的解决方案和实际操作价值&a…...

使用@Configuration和@Bean给spring容器中注入组件

Confguration->告诉spring这是一个配置类 以前我们是使用配置文件来注册bean的&#xff0c;现如今可以用Configuration 来代替配置文件。 //配置配配置文件 Configuration // 告诉Spring这是一个配置类,等同于以前的配置文件 public class MainConfig {// Bean注解是给IOC…...

信号波形解读

can波形解读 实际波形 标准帧 发送数据 仲裁段 0x1AA 数据长度为8字节 内容为&#xff1a;0x41, 0x20, 0x38, 0x41, 0x00, 0x16, 0x00, 0x00 波特率 111K...

Centos 解决 XXX不在 sudoers 文件中。此事将被报告。的错误

本来想使用 sudo 拷贝一个文件&#xff0c;结果出现上面的问题&#xff01; 下面是解决方法&#xff1a; 首先登录root&#xff0c;然后执行下面的命令 vim /etc/sudoers 将你需要添加的用户带红色框线的地方&#xff0c;模仿root写一遍&#xff0c;然后保存&#xff01; …...

雪花算法和uuid的区别

雪花算法&#xff08;Snowflake Algorithm&#xff09;和 UUID&#xff08;Universally Unique Identifier&#xff09;都是用于生成唯一标识符的方法&#xff0c;但它们在实现和适用场景上存在一些区别。 雪花算法&#xff1a; 雪花算法是Twitter开发的一种分布式ID生成算法…...

docker之DockerFile与网络

目录 DockerFile 构建步骤 基础知识 指令 实战&#xff1a;构建自己的centos 第一步&#xff1a;编写dockerfile文件 第二步&#xff1a;构建镜像文件 docker网络 原理 功能 网络模式 host模式 container模式 none模式 bridge模式 DockerFile dockerfile 是用来…...

知识蒸馏开山之作(部分解读)—Distilling the Knowledge in a Neural Network

1、蒸馏温度T 正常的模型学习到的就是在正确的类别上得到最大的概率&#xff0c;但是不正确的分类上也会得到一些概率尽管有时这些概率很小&#xff0c;但是在这些不正确的分类中&#xff0c;有一些分类的可能性仍然是其他类别的很多倍。但是对这些非正确类别的预测概率也能反…...

centos 7 安装 docker-compose curl 设置代理

sudo curl -x “http://192.168.1.2:3128” 需要验证的代理 sudo curl -x “http://username:password192.168.1.2:3128” 1.下载 sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/lo…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...