大家好,我是python222_小锋老师,看到一个不错的基于Python的在线音乐网站系统(后端Django)【论文+源码+SQL脚本】,分享下哈。
项目视频演示
https://www.bilibili.com/video/BV1U2HczxEL1/
项目介绍
本文设计了一种基于Python的音乐播放网站,为人们提供了方便快捷、即用即搜的音乐搜索播放服务,包括音乐新闻、音乐交流、歌曲信息、歌曲排行、歌手排行等功能等,用户不仅能够方便快捷地查看音乐新闻、还能搜索自己喜爱的音乐歌曲进行播放等。音乐播放网站采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采用Python编程语言,MySQL数据库,Ajax异步交互,根据Ajax异步模式等开发工具,完成了系统的主要模块的页面设计和功能实现。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。
系统展示
部分代码
from django.shortcuts import render, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
from index.models import Song, Dynamic
def SearchView(request, page):
if request.method == 'GET':
# 搜索歌曲
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:6]
# 获取搜索内容,如果kword为空即查询全部歌曲
kword = request.session.get('kword', '')
if kword:
# Q是SQL语句里的or语法
song_info = Song.objects.values('song_id', 'song_name', 'song_singer', 'song_time').filter(Q(song_name__icontains=kword) | Q(song_singer=kword)).order_by('-song_release').all()
else:
song_info = Song.objects.values('song_id', 'song_name', 'song_singer', 'song_time').order_by('-song_release').all()[:50]
# 分页功能
paginator = Paginator(song_info, 5)
try:
contacts = paginator.page(page)
except PageNotAnInteger:
contacts = paginator.page(1)
except EmptyPage:
contacts = paginator.page(paginator.num_pages)
# 添加歌曲搜索次数
song_exist = Song.objects.filter(song_name=kword)
if song_exist:
song_id = song_exist[0].song_id
dynamic_info = Dynamic.objects.filter(song_id=int(song_id)).first()
# 判断歌曲动态信息是否存在,存在就在原来基础上加1
if dynamic_info:
dynamic_info.dynamic_search += 1
dynamic_info.save()
# 动态信息不存在则创建新的动态信息
else:
dynamic = Dynamic(dynamic_plays=0, dynamic_search=1, dynamic_down=0, song_id=song_id)
dynamic.save()
return render(request, 'search/search.html', locals())
else:
# 处理POST请求,并重定向搜索页面。
request.session['kword'] = request.POST.get('kword', '')
return redirect('/search/1.html')
from django.db import models
# 歌曲分类表label
class Label(models.Model):
label_id = models.AutoField('序号', primary_key=True)
label_name = models.CharField('分类标签', max_length=10)
def __str__(self):
return self.label_name
class Meta:
# 设置admin界面的显示内容
verbose_name = '歌曲分类'
verbose_name_plural = '歌曲分类'
# 歌曲信息表song
class Song(models.Model):
song_id = models.AutoField('序号', primary_key=True)
song_name = models.CharField('歌名', max_length=50)
song_singer = models.CharField('歌手', max_length=50)
song_time = models.CharField('时长', max_length=10)
song_album = models.CharField('专辑', max_length=50)
song_languages = models.CharField('语种', max_length=20)
song_type = models.CharField('类型', max_length=20)
song_release = models.CharField('发行时间', max_length=20)
song_img = models.CharField('歌曲图片', max_length=20)
song_lyrics = models.CharField('歌词', max_length=50, default='暂无歌词')
song_file = models.CharField('歌曲文件', max_length=50)
label = models.ForeignKey('Label', on_delete=models.CASCADE, verbose_name='歌曲分类')
def __str__(self):
return self.song_name
class Meta:
# 设置admin界面的显示内容
verbose_name = '歌曲信息'
verbose_name_plural = '歌曲信息'
# 歌曲动态表dynamic
class Dynamic(models.Model):
dynamic_id = models.AutoField('序号', primary_key=True)
dynamic_plays = models.IntegerField('播放次数')
dynamic_search = models.IntegerField('搜索次数')
dynamic_down = models.IntegerField('下载次数')
song = models.ForeignKey('Song', on_delete=models.CASCADE, verbose_name='歌名')
class Meta:
verbose_name = '歌曲动态'
verbose_name_plural = '歌曲动态'
# 歌曲点评论comment
class Comment(models.Model):
comment_id = models.AutoField('序号', primary_key=True)
comment_text = models.CharField('内容', max_length=500)
comment_user = models.CharField('用户', max_length=20)
comment_date = models.CharField('日期', max_length=50)
song = models.ForeignKey('Song', on_delete=models.CASCADE, verbose_name='歌名')
class Meta:
verbose_name = '歌曲评论'
verbose_name_plural = '歌曲评论'
源码下载
链接:https://pan.baidu.com/s/1zKh80kmyqP5Gl60zdYWkFQ
提取码:1234
