首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django 1.9.2 + jQuery +错误后403-CSRF令牌丢失或不正确

Django 1.9.2 + jQuery +错误后403-CSRF令牌丢失或不正确
EN

Stack Overflow用户
提问于 2016-03-15 20:28:43
回答 3查看 2.9K关注 0票数 1

我是django的新手,我试图通过点击网页上的按钮从views.py中启动简单的函数。我就是这么做的:

HTML:

代码语言:javascript
运行
复制
<form method="post">{% csrf_token %}
<button type="submit" class="btn btn-circle btn-primary btn-xl" id="add_address_button"><i class="fa fa-check"></i></button>
</form>

    $('#add_address_button').click( function() {
        $.post("adres/add_address_button_action/", function () {
            alert('OK');
        });
    });

urls.py

代码语言:javascript
运行
复制
url(r'^adres/add_address_button_action/$',views.add_address_button_action, name = 'add_address_button_action'),

views.py

代码语言:javascript
运行
复制
def add_address_button_action(request):    
    adres = get_object_or_404(Adres, id =2) 
    return render(request, 'serwis/address_detail.html', RequestContext(request,  {'address_detail_zmienna': adres}))

航站楼提供的资料:

代码语言:javascript
运行
复制
Forbidden (CSRF token missing or incorrect.): /adres/add_address_button_action/ 
...
"POST /adres/add_address_button_action/ HTTP/1.1" 403 2274

我在views.py中尝试了不同的返回方式:

代码语言:javascript
运行
复制
return render_to_response('serwis/address_detail.html', RequestContext(request, {'address_detail_zmienna': adres}))
return redirect('serwis/address_detail.html', {'address_detail_zmienna': adres})

但它们都不起作用。

如果有人能帮我解决这个问题,我会非常感激的。我读过很多关于这个问题的话题,但大多数都过时了--而且没有帮助。

亲切的问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-16 21:03:36

在一天结束时,我一直在学习本教程:

https://impythonist.wordpress.com/2015/06/16/django-with-ajax-a-modern-client-server-communication-practise/

而且效果很好。

谢谢大家的关注。

票数 1
EN

Stack Overflow用户

发布于 2016-03-15 20:40:04

看起来您没有将CSRF令牌传递给服务器。看看医生们

您需要预先配置您的jQuery以在您提出的每个AJAX请求的头中传递csrf令牌,或者您需要显式地将CSRF令牌作为数据传递给$.post()函数。

详细代码可在上述链接文档中找到。

票数 2
EN

Stack Overflow用户

发布于 2016-03-16 06:42:09

我建议在chrome开发工具中查看:

  1. 您是否验证了标记是否存在于html中?
  2. 你检查过邮件请求了吗?它也包含令牌吗?

这里的问题与js / html / jQuery有关。如果使用带有submit类型的按钮,也不需要添加单击处理程序。按钮带有type="submit"触发器post请求..。第二个post请求(由jQuery发送)看起来是多余的,并且发送时没有所需的令牌(否则您将传递它)。

我建议使用“action”属性:

代码语言:javascript
运行
复制
<form method="post" action="adres/add_address_button_action/">
    {% csrf_token %}
    <button type="submit" class="btn btn-circle btn-primary btn-xl" id="add_address_button"><i class="fa fa-check"></i></button>
</form>

现在应该管用了..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36021488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档