与ajax相似的django并不像

时间:2017-08-13 14:41:03

标签: javascript jquery python ajax django

我,所以我用django编写了一个应用程序并实现了一个类似的功能,但是我注意到它工作正常,但问题是如果用户喜欢帖子并且决定不喜欢它,那就喜欢。 count将变为-1而不是0,因此两个用户可能会变为3,但如果两个用户中的一个不喜欢它,那么它将变为1。下面是我的jQuery函数 的的jQuery

$(document).ready(function(){
          function updateText(btn, newCount, verb){
          btn.text(newCount + " " + verb)
      }
      $(".like-btn").click(function(e){
        e.preventDefault()
        var this_ = $(this)
        var likeUrl = this_.attr("data-href")
        var likeCount = parseInt(this_.attr("data-likes")) | 0
        var addLike = likeCount + 1
        var removeLike = likeCount - 1
        if (likeUrl){
           $.ajax({
            url: likeUrl,
            method: "GET",
            data: {},
            success: function(data){
              console.log(data)
              var newLikes;
              if (data.liked){
                  updateText(this_, addLike, "Unlike")
              } else {
                  updateText(this_, removeLike, "Like")
                  // remove one like
              }
            }, error: function(error){
              console.log(error)
              console.log("error")
            }
          })
        }

      })
  })

view.html

<p><a class='like-btn' data-href='{{ obj.get_api_like_url }}' data-likes='{{ obj.likes.count }}'  href='{{ obj.get_like_url }}'>{{ obj.likes.count }} Like</a></p>

View.py

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions

class PostLikeAPIToggle(APIView):
    authentication_classes = (authentication.SessionAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

    def get(self, request, slug=None, format=None):
        # slug = self.kwargs.get("slug")
        obj = get_object_or_404(Post, slug=slug)
        url_ = obj.get_absolute_url()
        user = self.request.user
        updated = False
        liked = False
        if user.is_authenticated():
            if user in obj.likes.all():
                liked = False
                obj.likes.remove(user)
            else:
                liked = True
                obj.likes.add(user)
            updated = True
        data = {
            "updated": updated,
            "liked": liked
        }
        return Response(data)

如果需要我的代码的任何其他部分,我很乐意提供它。谢谢

1 个答案:

答案 0 :(得分:0)

当用户喜欢或不喜欢帖子时,您尚未更新<configuration> <system.webServer> <modules> <add name="HelloWorldModule" type="HelloWorldModule" /> </modules> </system.webServer> </configuration> 。由于页面不会刷新包含值data-likes的属性data-likes的标记,因此永远不会在UI上重新呈现。

{{ obj.likes.count }}

注意:您可以使用if (data.liked) { // ... } else { // ... } // update the `data-likes` this_.data('likes', likeCount); 方法访问data- *属性,而不是使用.data()
参考:jQuery .data() docs