javascript - 类型错误状态文本 : "Internal Server Error" for a simple post "LIKE" feature in Django using Ajax

标签 javascript python jquery ajax django

我有一个简单的帖子,如切换按钮,用户可以在其中喜欢帖子。它在不添加 jQuery 和 Ajax 方法的情况下工作正常。但是我需要添加 Ajax 来删除页面刷新。下面是我添加 Ajax 和 jQuery 的代码。我做错了什么?

我在底部添加了错误,上面写着

got an unexpected keyword argument 'username'

我该如何解决?

我的模型是

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts')        
    title = models.CharField(max_length=250, unique=True)
    slug = models.SlugField()
    message = models.TextField()       
    likes = models.ManyToManyField(User, blank=True, related_name='post_likes')

    def get_api_like_url(self):
       return reverse('posts:like_api', kwargs={'username': self.user.username,
                                         'slug': self.slug})

    def get_absolute_url(self):
       return reverse('posts:single', kwargs={'username': self.user.username,
                                           'slug': self.slug})

    def get_like_url(self):
       return reverse('posts:like', kwargs={'username': self.user.username,
                                         'slug': self.slug})

我的看法是

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

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

在我的模板中有以下代码

<script>
    $(document).ready(function () {
        $(".like-btn").click(function (e) {
            e.preventDefault();
            var this_ = $(this);
            var likeUrl = this_.attr("data-href");
            $.ajax({
                url : likeUrl,
                method: "GET",
                data: {},
                success: function (data) {
                    console.log(data);
                    // $("#like-section").html(response)
                }, error: function (error) {
                    console.log("error");
                    console.log(error);
                }
            })
        })
    })
</script>

<div class="text-center">
{% if user in post.likes.all %}
    <a class="like-btn" data-href="{{post.get_api_like_url}}" href="{{post.get_like_url}}">
        <img src="{% static 'images/HEART.RED.png' %}" height="25px">
    </a><br/>
{% else %}
    <!--<a href=""><img src="{% static 'images/HEART.png' %}" height="25px"></a><br/>-->
    <a class="like-btn" data-href="{{post.get_api_like_url}}" href="{{post.get_like_url}}">
        <img src="{% static 'images/HEART.png' %}" height="25px">
    </a><br/>
{% endif %}

下面是我调用点赞按钮的网址

url(r'^(?P<username>[-\w]+)/(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api'),

下面是我遇到的错误

responseText: "TypeError at /posts/charlize/singes-boat-new-york/like_api\nget() got an unexpected keyword argument 'username'\n\nRequest Method: GET\nRequest URL:

最佳答案

您的 URL 模式捕获 usernameslug:

url(r'^(?P<username>[-\w]+)/(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api')

这些值被传递给 PostLikeAPIToggle,但它的 get 方法不期望接收 username

您似乎不需要 username,因为您在 View 方法中从 request.user 获取了用户,因此我建议更改您的 URL 模式以不捕获用户名:

url(r'^[-\w]+/(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api')

您可以完全删除该段,这样会更干净:

url(r'^(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api')

另一种选择是更新 PostLikeApiToggle.get 以接受 username,但由于您没有使用该值,这可能不是正确的决定。

关于javascript - 类型错误状态文本 : "Internal Server Error" for a simple post "LIKE" feature in Django using Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52443946/

相关文章:

python - 如何在 Qt 环境中嵌入的 matplotlib 中更快地绘制大量信号?

python - 一周内在不同的间隔运行 cron

JQuery Mobile native 选择不适用于机器人

javascript - 问题计算表滚动条位置

javascript - Visual Studio 中 CSS/javascript 的 Vim 样式折叠

javascript - 如何将javascript应用于多个类?

javascript - google api redirect_uri_mismatch 错误

javascript - 设置为 false 后重新激活 jquery click 方法

python - Django/python - 消除关于日期和时区意识的混淆

javascript - JQuery 将 HTML 重写为文本