HanJun27 2 months ago
parent 687acb7e6c
commit e9fac53a27

File diff suppressed because it is too large Load Diff

@ -14,7 +14,9 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
from . import views
from comment.views import CommentView
urlpatterns = [
path('<int:song_id>.html', views.commentView, name='comment'),
path('<int:song_id>', CommentView.as_view(), name='comment'),
]

@ -1,20 +1,15 @@
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render, redirect
from django.http import Http404
from django.views import View
from index.models import *
import time
'''
试图函数的commentView有1个函数参数其中song_id是来自于URL的变量URL的变量和视图函数的参数要一一对应
如果视图函数的参数与URL的变量对应不上那么程序会抛出参数不相符的报错信息
'''
def commentView(request, song_id):
# 热搜歌曲
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:6]
# 点评提交处理
if request.method == 'POST':
class CommentView(View):
def post(self, request, song_id):
# 点评提交处理
comment_text = request.POST.get('comment', '')
comment_user = request.user.username if request.user.username else '匿名用户'
if comment_text:
@ -24,8 +19,11 @@ def commentView(request, song_id):
comment.comment_date = time.strftime('%Y-%m-%d', time.localtime(time.time()))
comment.song_id = song_id
comment.save()
return redirect('/comment/%s.html' % (str(song_id)))
else:
return redirect('/comment/%s' % song_id)
def get(self, request, song_id):
# 热搜歌曲
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:6]
song_info = Song.objects.filter(song_id=song_id).first()
# 歌曲不存在抛出404异常
if not song_info:

File diff suppressed because it is too large Load Diff

@ -87,9 +87,9 @@ WSGI_APPLICATION = 'music.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'NAME': 'music',
'USER': 'root',
'PASSWORD': '数据库密码',
'PASSWORD': 'yao950724',
'HOST': '127.0.0.1',
'PORT': '3306',
}

@ -35,7 +35,7 @@ path('',include('index.urls')):
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('index.urls')), #
path('ranking.html', include('ranking.urls')),
path('ranking', include('ranking.urls')),
path('play/', include('play.urls')),
path('comment/', include('comment.urls')),
path('search/', include('search.urls')),

@ -18,7 +18,7 @@ from . import views
urlpatterns = [
# 歌曲播放页面
path('<int:song_id>.html', views.playView, name='play'),
path('<int:song_id>', views.playView, name='play'),
# 歌曲下载
path('download/<int:song_id>.html', views.downloadView, name='download')
path('download/<int:song_id>.mp3', views.downloadView, name='download')
]

@ -1,3 +1,5 @@
from urllib.parse import quote
from django.shortcuts import render
from django.http import StreamingHttpResponse
from index.models import *
@ -6,7 +8,7 @@ from index.models import *
# 歌曲播放页面
def playView(request, song_id):
# 热搜歌曲
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:6]
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:4]
# 歌曲信息
song_info = Song.objects.get(song_id=int(song_id))
# 播放列表
@ -41,15 +43,18 @@ def playView(request, song_id):
else:
dynamic_info = Dynamic(dynamic_plays=1, dynamic_search=0, dynamic_down=0, song_id=song_id)
dynamic_info.save()
return render(request, 'play.html', locals())
response = render(request, 'play.html', locals())
return response
# 歌曲下载
def downloadView(request, song_id):
# 根据song_id查找歌曲信息
song_info = Song.objects.get(song_id=int(song_id))
print(song_id)
# 添加下载次数
dynamic_info = Dynamic.objects.filter(song_id=int(song_id)).first()
dynamic_info = Dynamic.objects.filter(song=int(song_id)).first()
# 判断歌曲动态信息是否存在存在就在原来基础上加1
if dynamic_info:
dynamic_info.dynamic_down += 1
@ -71,8 +76,11 @@ def downloadView(request, song_id):
break
# 将文件内容写入StreamingHttpResponse对象并以字节流方式返回给用户实现文件下载
filename = str(song_id) + '.mp3'
filename = song_info.song_name + '.mp3'
print(filename)
response = StreamingHttpResponse(file_iterator(file))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment; filename="%s"' % (filename)
# response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
response['Content-Disposition'] = 'attachment; {}'.format("filename*=utf-8''{}".format(quote(filename))) # quote确保中文格式不乱码
print(response['Content-Disposition'])
return response

@ -46,7 +46,7 @@
{% for item in All_list %}
<li class="computer">
<div class="main-cate">
<a href="{% url 'ranking' %}?type={{ item.song_type }}" class="main-title">{{ item.song_type }}</a>
<a href="{% url 'ranking' %}?type={{ item.song_company }}" class="main-title">{{ item.song_company }}</a>
</div>
</li>
{% endfor %}

@ -18,5 +18,5 @@ from . import views
urlpatterns = [
path('', views.rankingView, name='ranking'),
# 通用视图
path('.list', views.RankingList.as_view(), name='rankingList'),
# path('.list', views.RankingList.as_view(), name='rankingList'),
]

@ -17,33 +17,33 @@ def rankingView(request):
return render(request, 'ranking.html', locals())
# 通用视图
from django.views.generic import ListView
class RankingList(ListView):
# context_object_name设置Html模版的某一个变量名称
context_object_name = 'song_info'
# 设定模版文件
template_name = 'ranking.html'
# 查询变量song_info的数据
def get_queryset(self):
# 获取请求参数
song_company = self.request.GET.get('type', '')
if song_company:
song_info = Dynamic.objects.select_related('song').filter(song__song_company=song_company).order_by(
'-dynamic_plays').all()[:10]
else:
song_info = Dynamic.objects.select_related('song').order_by('-dynamic_plays').all()[:10]
return song_info
# 添加其他变量
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# 搜索歌曲
context['search_song'] = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:4]
# 所有歌曲分类
context['All_list'] = Song.objects.values('song_company').distinct()
return context
# Create your views here.
# #通用视图
# from django.views.generic import ListView
#
#
# class RankingList(ListView):
# # context_object_name设置Html模版的某一个变量名称
# context_object_name = 'song_info'
# # 设定模版文件
# template_name = 'ranking.html'
#
# # 查询变量song_info的数据
# def get_queryset(self):
# # 获取请求参数
# song_company = self.request.GET.get('type', '')
# if song_company:
# song_info = Dynamic.objects.select_related('song').filter(song__song_company=song_company).order_by(
# '-dynamic_plays').all()[:10]
# else:
# song_info = Dynamic.objects.select_related('song').order_by('-dynamic_plays').all()[:10]
# return song_info
#
# # 添加其他变量
# def get_context_data(self, **kwargs):
# context = super().get_context_data(**kwargs)
# # 搜索歌曲
# context['search_song'] = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:4]
# # 所有歌曲分类
# context['All_list'] = Song.objects.values('song_company').distinct()
# return context
# # Create your views here.

@ -16,5 +16,5 @@ Including another URLconf
from django.urls import path
from . import views
urlpatterns = [
path('<int:page>.html', views.searchView, name='search'),
path('<int:page>', views.searchView, name='search'),
]

@ -1,46 +1,41 @@
from django.shortcuts import render, redirect
from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
from index.models import *
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()
print(song_info)
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.html', locals())
# 热搜歌曲
search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:4]
# 获取搜索内容如果kword为空即查询全部歌曲
kword = request.POST.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:
# 处理POST请求并重定向搜索页面。
request.session['kword'] = request.POST.get('kword', '')
return redirect('/search/1.html')
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.get_page(page)
print(contacts)
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.html', locals())

@ -20,7 +20,7 @@ urlpatterns = [
# 用户的注册和登录
path('login.html', views.loginView, name='login'),
# 用户中心
path('home/<int:page>.html', views.homeView, name='home'),
path('home/<int:page>', views.homeView, name='home'),
# 退出用户登录
path('logout.html', views.logoutView, name='logout'),
path('logout', views.logoutView, name='logout'),
]

@ -1,4 +1,6 @@
from django.shortcuts import render, redirect
from django.views import View
from index.models import *
from user.models import *
from .form import MyUserCreationForm
@ -9,6 +11,10 @@ from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
# class Login(View):
# def post(self, request):
# 用户注册与登录
def loginView(request):
user = MyUserCreationForm()
@ -23,7 +29,7 @@ def loginView(request):
user = MyUser.objects.filter(Q(mobile=loginUser) | Q(username=loginUser)).first()
if check_password(password, user.password):
login(request, user)
return redirect('/user/home/1.html')
return redirect('/user/home/1')
else:
tips = '密码错误'
else:

@ -1 +1 @@
9103
8802

Loading…
Cancel
Save