防止用户多次提交喜欢或不喜欢的内容

时间:2012-08-22 20:49:21

标签: python django jquery django-sessions

的javascript

$('button.like').click(function(){
    $.get($(this).parent().attr('href'),function(data){
        $(this).html(''+data);
    });
    return false;
});

视图

def like(request):
    if request.is_ajax:
        r = Restaurant.objects.get(pk=1)
        r.food_likes +=1
        r.save()
        return HttpResponse(str(r.food_likes))
    else:
        return redirect(request.META.get('HTTP_REFERER'))

的HTML

    <a href="/like/">
        <button class="like pull-right btn btn-info text-left pad0  btn-mini mrg-left5 like-food">
            <i class="icon-thumbs-up"></i>&nbsp;`{{rest.food_likes}}`
        </button>
    </a>

疑问

如何使用会话更改javascript,以便即使用户重新加载页面,他也应该能够切换喜欢和不喜欢的内容,例如,如果用户喜欢某个特定的餐馆,那么特定的会话,如果他如果他想要撤消他的行动,他应该被提示不喜欢它,请帮助

1 个答案:

答案 0 :(得分:2)

您可以轻松地在django的用户会话中存储数据,

# Returns value of is_user_like key from user's session if it's available, or False
request.session.get('is_user_like', False)
# Sets value of is_user_like in user's session to True
request.session['is_user_like'] = True

将模板更改为:

<a href="/like/">
    <button class="like pull-right btn btn-info text-left pad0  btn-mini mrg-left5 like-food">
        <i class="{% if user_likes %}icon-thumbs-down{% else %}icon-thumbs-up{% endif %}"></i>&nbsp;`{{rest.food_likes}}`
    </button>
</a>

user_likes = request.session.get('is_user_like', False)传递给模板渲染器。 还可以将商店添加到会话行,添加到您喜欢的视图的代码中(如果您有任何内容,则不喜欢视图 -

def like(request):
    if request.is_ajax:
        r = Restaurant.objects.get(pk=1)
        r.food_likes +=1
        r.save()
        request.session['is_user_like'] = True
        return HttpResponse(str(r.food_likes))
    else:
        return redirect(request.META.get('HTTP_REFERER'))

请查看此文档以确保您已在django中启用了SessionMiddleware - 默认情况下已在生成的设置文件中启用它:https://docs.djangoproject.com/en/dev/topics/http/sessions/