0

问题

CSRF 阻止我发布到 Django 视图。

我正在关注官方 django 文档和这个问题的解决方案:Django CSRF check failed with an Ajax POST request。一切都应该设置好,但是执行时会失败。

我的设置如下,

jQuery发布方法:

var send_data = { 'name': place.name, 'address': address};

var csrftoken = $.cookie('csrftoken'); 

function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
} 

$.ajaxSetup({
    crossDomain: false, // obviates need for sameOrigin test
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type)) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

$.ajax({ url: '/results/',
    type: 'POST',
    data: send_data,
    success: function(response) {
      $('#results').html(response);
    }
  });

Django视图:

def results(request):
    return render(request, "stamped/restaurant.html")

网址.py

urlpatterns = patterns('',
    url(r'^$', views.home, name='home'),
    url(r'results/', views.results, name='results'),
)

一切都应该没问题。关于我缺少什么的任何想法?

我也累了:

由于 CSRF,无法 jQuery $.post 数据到 django 中的视图

Jquery Ajax 发布到 Django 视图

错误输出:

在此处输入图像描述

更新:

这个问题中的代码是正确的。看来我的浏览器缓存需要清空。

4

2 回答 2

1

在您的问题{{ csrf_token }}中,您的模板中缺少模板标签。

从文档:

如果您的视图未呈现包含 csrf_token 模板标签的模板,则 Django 可能不会设置 CSRF 令牌 cookie。这在表单被动态添加到页面的情况下很常见。为了解决这种情况,Django 提供了一个视图装饰器来强制设置 cookie:ensure_csrf_cookie()。

于 2013-08-21T19:33:57.390 回答
0

解决方案:

清空浏览器缓存。上面的代码是正确的。

于 2013-08-27T03:56:02.273 回答