POST http://127.0.0.1:8000/follow/fav/8/1/ 403(禁止)[重复]

Posted

技术标签:

【中文标题】POST http://127.0.0.1:8000/follow/fav/8/1/ 403(禁止)[重复]【英文标题】:POST http://127.0.0.1:8000/follow/fav/8/1/ 403 (FORBIDDEN) [duplicate] 【发布时间】:2016-05-03 04:33:06 【问题描述】:

我不确定为什么会出现此错误。我有最喜欢的应用程序,而 ajax 肯定分崩离析。因为当我单击一个应该可以工作但现在不工作的按钮时会发生此错误。我的猜测是我缺少一些 csrf 或 cookie 或错误的 jquery 版本....我不确定。这是我的代码

html文件中

<div class="actions">% if user.is_authenticated %% fav_item category user %% endif %</div>
</div>

我也会发布views.py

def ajax_login_required(view_func):
    def wrap(request, *args, **kwargs):
        if request.user.is_authenticated():
            return view_func(request, *args, **kwargs)
        json = simplejson.dumps('not_authenticated': True)
        return HttpResponse(json, content_type='application/json', status=401)
    wrap.__doc__ = view_func.__doc__
    wrap.__dict__ = view_func.__dict__
    return wrap

@ajax_login_required
def ajax_fav(request, ctype_id, obj_id):
    """

    """
    ctype = get_object_or_404(ContentType, pk=ctype_id)
    item = ctype.get_object_for_this_type(pk=obj_id)    
    if Favorite.objects.filter(user=request.user, content_type=ctype, object_id=obj_id):
        fav = Favorite.objects.get(user=request.user, content_type=ctype, object_id=obj_id)
        fav.delete()
        count = Favorite.objects.favorites_for_object(item).count()
        data_dict = 'id': 0, 'message': fav_settings.FAV_ADD, 'counter': build_message(count), 
    else:        
        fav = Favorite.objects.create_favorite(item, request.user)
        count = Favorite.objects.favorites_for_object(item).count()
        data_dict = 'id': fav.id, 'message': fav_settings.FAV_REMOVE, 'counter': build_message(count), 
    return HttpResponse(simplejson.dumps(data_dict), content_type='application/javascript')

编辑:/在控制台中我得到 js 错误 未捕获的 SyntaxError:意外的标识符

$(function()
    $('a.favIt').on('click', function()      
        var itemId = $(this).attr('id').split("_")[1];
        $.ajax(
            type: "POST",
            url: $(this).attr("href"),
            data: csrfmiddlewaretoken: ' csrf_token '
            dataType: "json",
            timeout: 2000,
            cache: false,           
            beforeSend: function(XMLHttpRequest) 
                //$("#loader").fadeIn();
            ,
            error: function(data, XMLHttpRequest, textStatus, errorThrown)
                $(this).html("Error connecting to the server.");
            ,              
            complete: function(XMLHttpRequest, textStatus) 
                //$("#loader").fadeOut();
            ,                        
            success: function(data, textStatus, XMLHttpRequest)
                $('#FavIt_'+itemId).html(data.message);
                $('#FavCounter_'+itemId).html(data.counter);
            
            );             
        return false;
    );
);

它说它发生在第 8 行,即 dataType: "json",我发布了 views.py

【问题讨论】:

看来这一点的答案可能会有所帮助:***.com/questions/13035412/… 【参考方案1】:

您需要在 ajax 调用中将 csrf 令牌作为数据的一部分传递:

data: csrfmiddlewaretoken: ' csrf_token '

【讨论】:

"and in html file" 有点暗示 ajax 在一个单独的 js 文件中。但是是的,缺少有很多重复项的 csrf 令牌。 @sayse:这是一个很好的观点。迈克,您也可以阅读此答案:***.com/questions/23349883/…. 谢谢你,S,当然是 Shane @ShangWang 我得到 Uncaught SyntaxError: Unexpected identifier now that I changed,,,你知道为什么吗?? 信息太少,我无法帮助您。在 python 中,您应该始终让人们看到回溯以检查错误。您还应该学习如何阅读回溯。您可以编辑您的问题以反映这一点吗?

以上是关于POST http://127.0.0.1:8000/follow/fav/8/1/ 403(禁止)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

cookie手工注入

Django - 字典更新序列元素#0 的长度为 1; 2是必需的[重复]

vue 本地调试接口跨域问题解决

小猪POST+乌鸦POST+js+商梦POST+小霖POST+骚华破解培训教程集合(资源共享吧首发)

web.com/post/post-title 重定向到 web.com/post-title

gin-post数据