Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError statusText:“;“内部服务器错误”;对于一个简单的帖子;例如;使用Ajax的Django特性_Javascript_Python_Jquery_Ajax_Django - Fatal编程技术网

Javascript TypeError statusText:“;“内部服务器错误”;对于一个简单的帖子;例如;使用Ajax的Django特性

Javascript TypeError statusText:“;“内部服务器错误”;对于一个简单的帖子;例如;使用Ajax的Django特性,javascript,python,jquery,ajax,django,Javascript,Python,Jquery,Ajax,Django,我有一个简单的post-like切换按钮,用户可以喜欢一篇文章。它在不添加jQuery和Ajax方法的情况下运行良好。但是,我需要添加Ajax来删除页面刷新。下面是我添加Ajax和jQuery的代码。我做错了什么 我已经在底部添加了错误,它说 获取了意外的关键字参数“username” 我该如何解决这个问题 我的模特是 class Post(models.Model): user = models.ForeignKey(User, related_name='posts')

我有一个简单的post-like切换按钮,用户可以
喜欢
一篇文章。它在不添加jQuery和Ajax方法的情况下运行良好。但是,我需要添加Ajax来删除页面刷新。下面是我添加Ajax和jQuery的代码。我做错了什么

我已经在底部添加了错误,它说

获取了意外的关键字参数“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 %}

$(文档).ready(函数(){
$(“.like btn”)。单击(函数(e){
e、 预防默认值();
var this=$(this);
var likurl=此属性(“数据href”);
$.ajax({
url:likeUrl,
方法:“获取”,
数据:{},
成功:功能(数据){
控制台日志(数据);
//$(“#like section”).html(回复)
},错误:函数(错误){
控制台日志(“错误”);
console.log(错误);
}
})
})
})
{%if用户在post.likes.all%}

{%else%}
{%endif%}
下面是我调用like按钮的URL

url(r'^(?P<username>[-\w]+)/(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api'),
url(r'^(?P[-\w]+)/(?P[-\w]+)/like_-api/$”,views.PostLikeAPIToggle.as_-view(),name='like_-api'),
下面是我得到的错误

responseText:“TypeError at/posts/charlize/singes boat new york/like_api\nget()得到一个意外的关键字参数'username'\n\n请求方法:获取\n请求URL:


您的URL模式捕获
用户名
slug

url(r'^(?P<username>[-\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')
url(r'^(?P[-\w]+)/like_-api/$,views.PostLikeAPIToggle.as_-view(),name='like_-api')

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

是否有其他方法将username添加到视图中。我尝试更改URL,还必须更改
def get\u api\u like\u URL(self):
在模型中,它破坏了我其他页面中的许多代码。我尝试将我的视图更改为
def-get(self,request,slug=None,username=None,format=None):
给我的
'Post'不是JSON可序列化的
错误对不起,你说的“将用户名添加到视图”是什么意思"? 是的,您必须将调用更改为
reverse()
,才能不再提供用户名。这是如何破坏其他页面中的代码的?“不可JSON序列化”错误是一个新问题。您试图将其作为服务器响应中的
“post”
包含,但Django不知道如何将
post
对象转换为JSON。您可以,也可以手动填充所需的字段。完全不相关,但1/如果obj.likes.all()中的用户使用此
是非常低效的-您希望
如果obj.likes.filter(user=user.exists()
(不要忘记在模板中也修复它),2/GET请求必须是幂等的(它不能更改服务器状态)-您想在此处发送POST请求,definilty。@Brunodesshuilliers非常感谢您,我一定会相应地更新我的代码,并检查POST选项关于“POST选项”(提示:我们这里不是在谈论“选项”-GET请求必须是幂等的),您可能想阅读以下内容:
url(r'^(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api')