![](/img/trans.png)
[英]Forbidden (CSRF token missing or incorrect.) during ajax POST in Django
[英]Ajax post to Django view CSRF forbidden
CSRF阻止我发布到Django视图。
我正在遵循官方django文档和以下问题的解决方案: Django CSRF检查失败,并带有Ajax POST请求 。 一切都应该设置正确,但是执行失败。
我的设置如下
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")
Urls.py
urlpatterns = patterns('',
url(r'^$', views.home, name='home'),
url(r'results/', views.results, name='results'),
)
一切都应该没问题。 对我缺少的东西有任何想法吗?
我也累了:
由于CSRF无法将jQuery $ .post数据发送到Django中的视图
错误输出:
更新:
这个问题中的代码是正确的。 看来我的浏览器缓存需要清空。
在您的问题中,您缺少模板中的模板标签{{ csrf_token }}
。
从文档:
如果您的视图未呈现包含csrf_token模板标记的模板,则Django可能未设置CSRF令牌cookie。 在将表单动态添加到页面的情况下,这很常见。 为了解决这种情况,Django提供了一个视图装饰器来强制设置cookie:sure_csrf_cookie()。
解:
清空浏览器缓存。 上面的代码是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.