【发布时间】:2015-07-04 06:23:46
【问题描述】:
我使用 AJAX 在 Django 上实现了一个投票/取消投票系统,如下所示:
views.py
@login_required
def vote(request):
post_id = None
if request.method == 'GET':
post_id = request.GET['post_id']
if post_id:
post = Post.objects.get(id=int(post_id))
current_user = request.user.id
try:
voted = Vote.objects.get(post=post, user=current_user)
except Vote.DoesNotExist:
voted = None
# Voting code
if not voted:
Vote.objects.get_or_create(post=post, user=request.user)
post.points = post.vote_set.all().count()
post.save()
print("voted!")
return HttpResponse(post.points)
@login_required
def unvote(request):
post_id = None
if request.method == 'GET':
post_id = request.GET['post_id']
if post_id:
post = Post.objects.get(id=int(post_id))
current_user = request.user.id
try:
voted = Vote.objects.get(post=post, user=current_user)
except Vote.DoesNotExist:
voted = None
# Voting code
if voted:
Vote.objects.filter(post=post, user=request.user).delete()
post.points = post.vote_set.all().count()
post.save()
print("unvoted!")
return HttpResponse(post.points)
main.js
// Voting
$('.vote').click(function(){
var postid;
postid = $(this).attr("data-postid");
$.get('/vote/', {post_id: postid}, function(data){ //Send post_id to vote view
$('#points' + postid).html(data); // Data changed element
$('#' + postid).attr('class', 'voted');
});
});
// Unvoting
$('.voted').click(function(){
var postid;
postid = $(this).attr("data-postid");
$.get('/unvote/', {post_id: postid}, function(data){ //Send post_id to unvote view
$('#points' + postid).html(data); // Data changed element
$('#' + postid).attr('class', 'vote');
});
});
投票工作正常,但我必须刷新页面才能取消投票。以及取消投票然后再次投票。这是怎么回事?
【问题讨论】: