|
|
from datetime import datetime
|
|
|
|
|
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
|
|
from django.http import HttpResponseBadRequest, JsonResponse
|
|
|
from django.shortcuts import *
|
|
|
from django.template.loader import render_to_string
|
|
|
from ratelimit.decorators import ratelimit
|
|
|
|
|
|
from video.forms import CommentForm
|
|
|
from video.models import Video
|
|
|
|
|
|
|
|
|
|
|
|
@ratelimit(key='ip', rate='2/m')
|
|
|
def submit_comment(request,pk):
|
|
|
"""
|
|
|
每分钟限制发2条
|
|
|
"""
|
|
|
was_limited = getattr(request, 'limited', False)
|
|
|
if was_limited:
|
|
|
return JsonResponse({"code": 1, 'msg': '评论太频繁了,请1分钟后再试'})
|
|
|
pass
|
|
|
video = get_object_or_404(Video, pk = pk)
|
|
|
form = CommentForm(data=request.POST)
|
|
|
|
|
|
if form.is_valid():
|
|
|
# print('success')
|
|
|
new_comment = form.save(commit=False)
|
|
|
new_comment.user = request.user
|
|
|
new_comment.nickname = request.user.nickname
|
|
|
new_comment.avatar = request.user.avatar
|
|
|
new_comment.video = video
|
|
|
new_comment.save()
|
|
|
|
|
|
data = dict()
|
|
|
data['nickname'] = request.user.nickname
|
|
|
data['avatar'] = request.user.avatar
|
|
|
data['timestamp'] = datetime.fromtimestamp(datetime.now().timestamp())
|
|
|
data['content'] = new_comment.content
|
|
|
|
|
|
comments = list()
|
|
|
comments.append(data)
|
|
|
|
|
|
html = render_to_string(
|
|
|
"comment/comment_single.html", {"comments": comments})
|
|
|
|
|
|
return JsonResponse({"code":0,"html": html})
|
|
|
return JsonResponse({"code":1,'msg':'评论失败!'})
|
|
|
|
|
|
|
|
|
def get_comments(request):
|
|
|
if not request.is_ajax():
|
|
|
return HttpResponseBadRequest()
|
|
|
page = request.GET.get('page')
|
|
|
page_size = request.GET.get('page_size')
|
|
|
video_id = request.GET.get('video_id')
|
|
|
video = get_object_or_404(Video, pk=video_id)
|
|
|
comments = video.comment_set.order_by('-timestamp').all()
|
|
|
comment_count = len(comments)
|
|
|
|
|
|
paginator = Paginator(comments, page_size)
|
|
|
try:
|
|
|
rows = paginator.page(page)
|
|
|
except PageNotAnInteger:
|
|
|
rows = paginator.page(1)
|
|
|
except EmptyPage:
|
|
|
rows = []
|
|
|
|
|
|
if len(rows) > 0:
|
|
|
code = 0
|
|
|
html = render_to_string(
|
|
|
"comment/comment_single.html", {"comments": rows})
|
|
|
else:
|
|
|
code = 1
|
|
|
html = ""
|
|
|
|
|
|
return JsonResponse({
|
|
|
"code":code,
|
|
|
"html": html,
|
|
|
"comment_count": comment_count
|
|
|
})
|