jquery - 如何将用户 ID 传递到 django ajax post 中?

标签 jquery ajax django

我正在尝试ajaxify一个类似按钮,无需ajax即可正常工作。所以我定义了一个静态文件:

$(function(){

$('#like').click(function(){
      $.ajax({
               type: "POST",
               url: "/news/like/",
               data: {
               'post_id': $(this).attr('name'), 
               'user': '{{request.user.id}}',
               'csrfmiddlewaretoken': '{{csrf_token}}'
               },
               dataType: "json",
               success: function(response) {
                      alert('You liked this')
                },
                error: function(rs, e) {
                       alert(rs.responseText);
                }
          }); 
    })

});

并修改相应的 View 如下:

 @csrf_exempt
def like(request):
    args = {}
    if request.method == 'POST':
        #lu = User.objects.get(id= request.user.id)
        puid = int(request.POST.get('puid', None))
        lu= User.objects.get(id= puid)
        post_id = request.POST.get('post_id', None)
        try:
            liked_news = News.objects.get(id = post_id)
        except:
            liked_news = None  

        if NewsLike.objects.filter(liker=lu.id, news=post_id):

            liked_news.likes -=1
            liked_news.save()
            NewsLike.objects.filter(news=post_id, liker=lu.id).delete()
            return HttpResponse(simplejson.dumps(args),
                                mimetype='application/javascript')            
            #return HttpResponseRedirect(reverse("news.views.post_withslug", args=[liked_news.slug]))

        else:

            liked_news.likes +=1
            liked_news.save()
            messages.success(request, "You liked this news") 
            newliker = NewsLike(liker=lu.id, news=post_id)
            newliker.save()


    args.update(csrf(request))
    #return HttpResponseRedirect(reverse("news.views.post_withslug", args=[liked_news.slug]))
    return HttpResponse(simplejson.dumps(args),
                                    mimetype='application/javascript')

临时添加“@csrf_exempt”装饰器以消除 csrf 错误。

但是,当我单击来自 Firefox 的按钮时

ValueError at /news/like/
invalid literal for int() with base 10: '{{request.user.id}}'

我应该如何解决这个问题?

最佳答案

无论如何,都不需要从 Javascript 传递当前用户。 View 已经知道该信息,因为它在请求中。因此,您应该将 View 代码中的 lu 替换为 request.user

关于jquery - 如何将用户 ID 传递到 django ajax post 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638713/

相关文章:

带有 PostgreSQL 10 的 Django?

javascript - 我应该使用方法还是子类?如果这是有道理的

javascript - 当我点击 ul 的汉堡包时,有没有办法水平移动并将 Logo 从中心移动到最左边?

javascript - 错误。访问 iFrame 内的 PDF 元素

javascript - 在 ajax 回调中加载 javascript

python - 在 React 应用程序中使用 axios.post 到 Django 端点时出现 403 错误代码

python - Django 属性错误 : 'Alias' object has no attribute 'urls'

javascript - JQuery 为什么我的 array.every 不是一个函数?

php - Jquery javascript ajax - 总价格未更新

c# - 向所有连接的客户端发送广播 POP-UP 消息