最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python Django實戰(zhàn)之歌曲搜索功能實現(xiàn)

 更新時間:2023年10月18日 10:24:51   作者:杭州第一深情  
這篇文章主要為大家詳細介紹了如何利用python Django實現(xiàn)歌曲搜索功能,文中的示例代碼講解詳細,具有一定的參考價值,有需要的小伙伴開業(yè)了解下

歌曲搜索

音樂平臺的每個網(wǎng)頁頂部都設置了歌曲搜索功能,歌曲搜索框以網(wǎng)頁表單的形式展示,并且以POST請求方式實現(xiàn)歌曲搜索功能,搜索結果顯示在歌曲搜索頁。歌曲搜索頁由項目應用search實現(xiàn),首先在search的urls.py中定義路由search。

總路由定義

from django.conf import settings
from django.contrib import admin
from django.urls import path, include, re_path
from django.views.static import serve
?
urlpatterns = [
    path('admin/', admin.site.urls),
    path('search/', include('search.urls')),
    re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
?

搜索路由定義

from django.urls import path
from .views import *
urlpatterns = [
    path('<int:page>.html', searchView, name='search'),
]

路由search設置了路由變量page,該變量代表某一頁的頁數(shù),因為歌曲的搜索結果具有不確定性,通過對搜索結果進行分頁處理可以美化和規(guī)范網(wǎng)頁內(nèi)容。路由的HTTP請求由視圖函數(shù)searchView負責接收和處理,在search的views.py中定義視圖函數(shù)searchView。

視圖定義

from django.shortcuts import render, redirect
from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
from django.shortcuts import reverse
from django.db.models import Q, F
from index.models import *
?
?
def searchView(request, page):
    if request.method == 'GET':
        # 熱搜歌曲
        searchs = Dynamic.objects.select_related('song').order_by('-search').all()[:6]
        # 獲取搜索內(nèi)容,如果kword為空,就查詢?nèi)扛枨?
        kword = request.session.get('kword', '')
        if kword:
            songs = Song.objects.filter(Q(name__icontains=kword) | Q(singer=kword)).order_by('-release').all()
        else:
            songs = Song.objects.order_by('-release').all()[:50]
        # 分頁功能
        paginator = Paginator(songs, 5)
        try:
            pages = paginator.page(page)
        except PageNotAnInteger:
            pages = paginator.page(1)
        except EmptyPage:
            pages = paginator.page(paginator.num_pages)
        # 添加歌曲搜索次數(shù)
        if kword:
            idList = Song.objects.filter(name__icontains=kword)
            for i in idList:
                dynamics = Dynamic.objects.filter(song_id=i.id)
                # 判斷歌曲動態(tài)信息是否存在,若存在,則在原來的基礎上加1
                if dynamics:
                    dynamics.update(search=F('search') + 1)
                # 若動態(tài)信息不存在,則創(chuàng)建新的動態(tài)信息
                else:
                    dynamic = Dynamic(plays=0, search=1, download=0, song_id=i.id)
                    dynamic.save()
        return render(request, 'search.html', locals())
    else:
        # 處理POST請求,并重定向搜索頁面
        request.session['kword'] = request.POST.get('kword', '')
        return redirect(reverse('search', kwargs={'page': 1}))

當視圖函數(shù)searchView接收到路由search的POST請求后,它將執(zhí)行歌曲搜索過程,執(zhí)行過程說明如下:

(1)當用戶在歌曲搜索框輸入搜索內(nèi)容并單擊“搜索”按鈕后,程序根據(jù)網(wǎng)頁表單的屬性action所指向的路由地址發(fā)送一個POST請求,Django接收到請求后,將請求信息交給視圖函數(shù)searchView進行處理。

(2)如果視圖函數(shù)searchView收到一個POST請求,那么首先將請求參數(shù)kword寫入會話Session進行存儲,請求參數(shù)kword是歌曲搜索框的搜索內(nèi)容,然后以重定向的方式訪問歌曲搜索頁。

(3)通過重定向訪問歌曲搜索頁,等同于向歌曲搜索頁發(fā)送一個GET請求,視圖函數(shù)searchView首先獲取會話Session的數(shù)據(jù)判斷Session是否存在kword。

(4)如果kword存在,就以kword作為查詢條件,分別在模型Song的字段name和singer中進行模糊查詢,查詢結果根據(jù)模型字段release進行降序排列;如果kword不存在,就查詢模型Song的所有歌曲,以模型字段release進行降序排列,并且只獲取前50首的歌曲信息。

(5)將查詢結果進行分頁處理,以每5首歌為一頁的方式進行分頁。函數(shù)參數(shù)page代表某一頁的頁數(shù),它也代表路由變量page。

(6)根據(jù)搜索內(nèi)容kword查找匹配的歌曲,將符合匹配條件的歌曲進行遍歷和判斷,如果歌曲的動態(tài)信息存在,就對該歌曲的搜索次數(shù)累加1,否則為歌曲新建一條動態(tài)信息,并將搜索次數(shù)設為1。

(7)最后將變量searchs和分頁對象pages傳遞給模板文件search.html,由模板引擎進行解析并生成相應的網(wǎng)頁內(nèi)容。

模板定義

當模板文件search.html接收到變量searchs和分頁對象pages后,模板引擎對模板語法進行解析并轉換成網(wǎng)頁內(nèi)容。變量searchs實現(xiàn)歌曲搜索框下方的熱搜歌曲,分頁對象pages實現(xiàn)當前分頁的歌曲列表歌分頁導航功能。

{% extends "base.html"  %}
{% load static %}
{% block link %}
<link rel="shortcut icon" href="{% static " rel="external nofollow"  rel="external nofollow"  rel="external nofollow" favicon.ico" %}">
<link rel="stylesheet" href="{% static " rel="external nofollow"  rel="external nofollow"  rel="external nofollow" css/common.css" %}">
<link rel="stylesheet" href="{% static " rel="external nofollow"  rel="external nofollow"  rel="external nofollow" css/search.css" %}">
{% endblock %}
?
{% block body  %}
<body>
    <div class="header">
        <a href="/" rel="external nofollow"  class="logo"><img src="{% static "image/logo.png" %}"></a>
        <div class="search-box">
            <form id="searchForm" action="{% url 'search' 1 %}" method="post">
                {% csrf_token %}
                <div class="search-keyword">
                    <input id="kword" name="kword" type="text" class="keyword" maxlength="120"/>
                </div>
                <input id="subSerch" type="submit" class="search-button" value="搜 索" />
            </form>
            <div id="suggest" class="search-suggest"></div>
            <div class="search-hot-words">
                {% for s in searchs  %}
                    <a target="play" href="{% url 'play' s.song.id %}" rel="external nofollow"  >{{ s.song.name }}</a>
                {% endfor  %}
            </div>
        </div>
    </div><!--end header-->
    <div class="nav-box">
        <div class="nav-box-inner">
            <ul class="nav clearfix">
                <li><a href="{% url 'index' %}" rel="external nofollow" >首頁</a></li>
                <li><a href="{% url 'ranking' %}" rel="external nofollow"  target="_blank">歌曲排行</a></li>
                <li><a href="{% url 'home' 1 %}" rel="external nofollow"  target="_blank">用戶中心</a></li>
            </ul>
        </div>
    </div><!--end nav-box-->
  <!--wrapper-->
    <div class="wrapper clearfix" id="wrapper">
    <div class="mod_songlist">
        <ul class="songlist__header">
            <li class="songlist__header_name">歌曲</li>
            <li class="songlist__header_author">歌手</li>
            <li class="songlist__header_time">時長</li>
        </ul>
        <ul class="songlist__list">
            {% for p in pages.object_list %}
            <li class="js_songlist__child">
                <div class="songlist__item">
                    <div class="songlist__songname">
                        <span class="songlist__songname_txt">
                            <a href="{% url 'play' p.id %}" rel="external nofollow"  class="js_song" target="play">{{ p.name }}</a>
                        </span>
                    </div>
                    <div class="songlist__artist">
                        <a href="javascript:;" rel="external nofollow"  class="singer_name" >{{ p.singer }}</a>
                    </div>
                    <div class="songlist__time">{{ p.time }}</div>
                </div>
            </li>
            {% endfor %}
        </ul>
        <div class="page-box">
            <div class="pagebar" id="pageBar">
                {% if pages.has_previous %}
                <a href="{% url 'search' pages.previous_page_number %}" rel="external nofollow"  class="prev" target="_self"><i></i>上一頁</a>
                {% endif %}
?
                {% for p in pages.paginator.page_range %}
                    {% if pages.number == p %}
                        <span class="sel">{{ p }}</span>
                    {% else %}
                        <a href="{% url 'search' p %}" rel="external nofollow"  target="_self">{{ p }}</a>
                    {% endif %}
                {% endfor %}
?
                {% if pages.has_next %}
                <a href="{% url 'search' pages.next_page_number %}" rel="external nofollow"  class="next" target="_self">下一頁<i></i></a>
                {% endif %}
            </div>
        </div>
    </div>
    </div>
</body>
{% endblock  %}

到此這篇關于python Django實戰(zhàn)之歌曲搜索功能實現(xiàn)的文章就介紹到這了,更多相關python Django內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Python設置Word文檔中表格的格式的方法

    使用Python設置Word文檔中表格的格式的方法

    本文介紹了使用PyQt5和python-docx庫開發(fā)的圖形化應用程序,用于對Word文檔中的表格進行格式化設置,該應用程序提供文件操作、基本格式設置、條件格式設置、邊框和背景設置等功能,支持跨平臺運行,并提供詳細的錯誤處理和用戶反饋,需要的朋友可以參考下
    2025-12-12
  • python中的print()輸出

    python中的print()輸出

    print() 方法用于打印輸出,最常見的一個函數(shù)。這篇文章主要介紹了python的print()輸出 ,需要的朋友可以參考下
    2019-04-04
  • 一篇文章帶你了解python標準庫--random模塊

    一篇文章帶你了解python標準庫--random模塊

    這篇文章主要給大家介紹了關于Python中random模塊常用方法的使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • Pandas的read_csv函數(shù)參數(shù)分析詳解

    Pandas的read_csv函數(shù)參數(shù)分析詳解

    這篇文章主要介紹了Pandas的read_csv函數(shù)參數(shù)分析詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python基礎之模塊詳解

    Python基礎之模塊詳解

    本文詳細講解了Python基礎之模塊,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 利用機器學習預測房價

    利用機器學習預測房價

    這篇文章主要介紹了利用機器學習回歸模型預測房價,解釋清晰,代碼詳細,是很不錯的機器學習實戰(zhàn)演練,對機器學習感興趣的朋友可以參考一下
    2021-04-04
  • python openvc 裁剪、剪切圖片 提取圖片的行和列

    python openvc 裁剪、剪切圖片 提取圖片的行和列

    這篇文章主要介紹了python openvc 裁剪、剪切圖片 提取圖片的行和列,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python包管理工具uv下載python版本慢問題解決辦法

    Python包管理工具uv下載python版本慢問題解決辦法

    uv是一個非??斓腜ython包和項目管理器,用Rust編寫,使用熱緩存安裝Trio的依賴項的速度對比,這篇文章主要介紹了Python包管理工具uv下載python版本慢問題的解決辦法,需要的朋友可以參考下
    2025-11-11
  • 如何在sae中設置django,讓sae的工作環(huán)境跟本地python環(huán)境一致

    如何在sae中設置django,讓sae的工作環(huán)境跟本地python環(huán)境一致

    這篇文章主要介紹了如何在sae中設置django,讓sae的工作環(huán)境跟本地python環(huán)境一致,需要的朋友可以參考下
    2017-11-11
  • python之實現(xiàn)兩個或多個列表相加

    python之實現(xiàn)兩個或多個列表相加

    這篇文章主要介紹了python之實現(xiàn)兩個或多個列表相加方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

招远市| 信宜市| 巫山县| 五台县| 龙口市| 怀宁县| 济阳县| 息烽县| 高陵县| 湟中县| 比如县| 桃园市| 华坪县| 大城县| 读书| 沁源县| 绥化市| 南乐县| 抚顺县| 林周县| 蒙阴县| 宜川县| 三门县| 伊吾县| 吉安市| 且末县| 大悟县| 九龙城区| 黄平县| 晋城| 新竹市| 常宁市| 华宁县| 新竹市| 长海县| 浠水县| 凤山县| 石林| 梅河口市| 府谷县| 康马县|