【问题标题】:prevent user from submitting likes or dislikes multiple times防止用户多次提交喜欢或不喜欢
【发布时间】:2012-08-18 08:29:54
【问题描述】:

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,以便即使用户重新加载页面,他也应该能够切换喜欢和不喜欢,例如,如果用户喜欢特定餐厅,则对于特定会话,然后如果他如果他想撤消他的操作,也会提示他不喜欢它,请帮助

【问题讨论】:

  • 对于 JS,可以使用 cookie。对于 Python,您可以创建会话或记录用户的 IP 地址。
  • 您知道gets 函数中的$(this) 没有引用您想要的元素吗?
  • 是的,我会将所需的元素保存到一个变量中,然后我会在 get 中使用它,但这不是重点,但你能建议我一些相关的例子吗,提前谢谢
  • 我知道这不是主要问题,但thisget 的函数上下文中没有引用您的按钮元素。
  • 投票前是否要求用户登录?如果没有,这可能会很困难。

标签: python django jquery django-sessions


【解决方案1】:

您可以在 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/

【讨论】:

  • 是的,我明白你的意思,但是如果我在同一页面上有多个相似的模型,那我应该如何设置会话密钥??
  • 我认为您可以在会话中存储一个数组或一个字典,例如,您的第 n 家餐厅的代码将是 request.session['user_likes'][n] = True
猜你喜欢
  • 2018-02-26
  • 2016-11-09
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多