Django实现音乐网站 ⒀

news2024/10/7 18:20:47

使用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部分不了解才导致的,这也是做项目的目的,能够比较全面的使用框架的功能,增进对框架的了解。

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

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

相关文章

基于web的鲜花商城系统java jsp网上购物超市mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的鲜花商城系统 系统有2权限&#xff1a;前台…

HCIA---访问控制列表

文章目录 目录 前言 一.ACL简介&#xff1a; 二.ACL工作原理 ACL组成&#xff1a; ​编辑 规则编号&#xff1a; ACL匹配规则&#xff1a; 总结 前言 一.ACL简介&#xff1a; ACL全称为Access Control List&#xff0c;即访问控制表&#xff0c;是一种用于控制网络资源访问…

微软韦青:滑向冰球将要到达的位置 | 科创人数智思维私董会第9期回顾

2023年8月5日&#xff0c;由科创人、北航投资联手创办的科创人数智思维私董会第9期圆满举行。 微软&#xff08;中国&#xff09;首席技术官韦青担任本次活动引导嘉宾&#xff0c;近20位来自传统企业、科创企业、投资机构的CEO、技术决策者及领域专家&#xff0c;围绕新人-机时…

【技术篇】• 饮用水除硝酸盐、地下水除砷、矿泉水除溴的技术汇总

我们所说的“自来水”是指从水龙头里放出来的水。但从水龙头里放出来并不等于安全卫生。实际上&#xff0c;原水必须经过各种处理措施之后才能称为安全卫生的饮用水。每一滴水都要经过了混凝、沉淀、过滤、消毒四个步骤的处理&#xff0c;才能去除杂质和细菌&#xff0c;变得安…

恒运资本:简易程序定增是什么意思?

近年来&#xff0c;在我国股市中&#xff0c;简易程序定增成为了一种受欢迎的融资方法。许多人听过它但并不知道它的含义和工作原理。在本文中&#xff0c;我们将从多个角度来分析简易程序定增。 一、什么是简易程序定增&#xff1f; 简易程序定增是指在不需求经过股东大会批阅…

这6本期刊不再被收录!8月SCISSCI期刊目录已更新~

【SciencePub学术】2023年8月21日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9496本期刊&#xff0c;SSCI期刊目录共包含3554本期刊。此次SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年7月&#xff09;相比…

AD四层板设计(Altium Designer)

AD绘制四层板 前言一、正片层和负片层介绍二、PCB板的叠层设计1.两层板的叠层2.四层板的叠层 三、规则设计参考资料 前言 1、用 Altium Designer 软件绘制电路时&#xff0c;通常2层板能实现设计需求。遇到板框固定&#xff0c;元器件密集的情况下&#xff0c;2 层板无法实现预…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么&#xff1f;为什么选Flutter&#xff1f; 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览&#xff1a; 4.UI 构建与布局什么是Widget&#xff1a;StatelessWidget和StatefulWidget&#xff1a;Widget的组合&#x…

不规则透明屏:工作原理和特点应用详解

不规则透明屏是一种新型的显示技术&#xff0c;它可以将图像或视频投射到任意形状的透明屏上&#xff0c;使得观众可以从不同角度观看到清晰的图像。 这种技术可以应用于各种领域&#xff0c;如广告、展览、商场等&#xff0c;具有很大的市场潜力。 不规则透明屏的工作原理是…

5款很少人知道的小众软件,先收藏再下载!

​ 今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 自定义开始菜单图标——TileIconifier ​ TileIconifier是一款可以让你自定义Windows开始菜单图标的软件&#xff0c;它可以替换…

Lnton羚通云算力平台OpenCV Python颜色空间转换与抠图教程

在 OpenCV Python 中&#xff0c;颜色空间转换和图像抠图是常见的图像处理任务。下面我将为你介绍如何进行颜色空间转换和图像抠图。 颜色空间转换&#xff1a; 在 OpenCV Python 中&#xff0c;可以使用 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。常用的…

jenkins全量迁移

文章目录 1、目的2、迁移1&#xff09;查看jenkins的主目录2&#xff09;登录要迁出的服务器打包3&#xff09;找到对应的war包4&#xff09;登录对应迁入服务&#xff0c;上传war包和打包的jenkins数据等5&#xff09;在新的服务器解压迁入的数据等&#xff0c;并查看端口是否…

python实战【外星人入侵】游戏并改编为【梅西vsC罗】(球迷整活)——搭建环境、源码、读取最高分及生成可执行的.exe文件

文章目录 &#x1f3a5;前言&#x1f4bc;安装Pygame&#x1f50b;游戏的实现读写并存储【外星人入侵】游戏最高分游戏源码alien_invasion.pygame_functions.pyship.pyalien.pybullet.pybutton.pyscoreboard.pygame_stats.pysettings.py宇宙飞船和外星人的 .bmp类型文件 &#…

期权酱也来说说期权双卖策略原理

期权option,又称选择权&#xff0c;是一类衍生品合约&#xff0c;买方支付权利金给卖方之后&#xff0c;买方有权在未来的特定日期或之前&#xff0c;以特定的价格向卖方买入或卖出标的资产的权利。下文介绍期权酱也来说说期权双卖策略原理。本文来自&#xff1a;期权酱 期权的…

万宾科技22款产品入选《城市生命线安全工程监测技术产品名录》

2023年8月17日-18日&#xff0c;由北京市地下管线协会主办的2023首届城市生命线安全与发展大会在北京召开&#xff0c;本次大会汇聚中央及地方政府主管领导、院士专家、行业领袖、龙头代表、产业精英等。 大会聚焦安全监管智慧平台和燃气爆炸、城市内涝、地下管线交互风险、第三…

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

NLP | 基于LLMs的文本分类任务

比赛链接&#xff1a;讯飞开放平台 来源&#xff1a;DataWhale AI夏令营3&#xff08;NLP&#xff09; Roberta-base&#xff08;BERT的改进&#xff09; ①Roberta在预训练的阶段中没有对下一句话进行预测&#xff08;NSP&#xff09; ②采用了动态掩码 ③使用字符级和词级…

Haproxy原理及部署

一、Haproxy简介 1、Haproxy应用分析 LVS在企业中康复在能力很强&#xff0c;但存在不足&#xff1a; LVS不支持正则处理&#xff0c;不能实现动静分离对于大型网站LVS的事实配置较为复杂&#xff0c;维护成本相对较高 Haproxy是一款可以供高可用性、负载均衡和基于TCP和HT…

开利网络企业数字化服务体系,为E+鲜生综合商业体提供驻点服务

随着开利网络深度合作伙伴E鲜生商业综合体的正式开业&#xff0c;开利网络持续为其提供数字化赋能服务&#xff0c;从数字化体系搭建、数字化营销体系落地到数字化团队落地扶持服务等&#xff0c;全流程跟踪项目上线落地过程情况&#xff0c;并根据市场反馈进行及时优化和调整。…

androidstudio Please specify a signing configuration for this variant (release)

当直接运行release版本时&#xff0c;报错Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (package64-release). 解决报错&#xff1a;添加签名&#xff0c;signingConfigs 写在buildTypes前…