csrf与ajax和django发布

使用jquery1.7.1和django1.3,我试图通过ajax发布一个post请求,在我在网上找到的一些教程代码中

$(document).ready(function(){ $("#create").click(create_note); }); var create_note = function() { var title = $("#title").val() var slug = $("#slug").val() if (title != "" && slug != "") { var data = { title:title, slug:slug }; console.log('title='+title); console.log('slug='+slug); var args = { type:"POST", url:"/create/", data:data, complete:done }; $.ajax(args); } else { // display failure } return false; }; 

url“/ create /”映射到django视图

 (r'^create/$','notes.views.create_note'), def create_note(request): error_msg = u"No POST data sent." if request.method == "POST": post = request.POST.copy() if post.has_key('slug') and post.has_key('title'): slug = post['slug'] if Note.objects.filter(slug=slug).count() > 0: error_msg = u"Slug already in use." else: title = post['title'] new_note = Note.objects.create(title=title,slug=slug) return HttpResponseRedirect(new_note.get_absolute_url()) else: error_msg = u"Insufficient POST data (need 'slug' and 'title'!)" return HttpResponseServerError(error_msg) 

当我单击提交按钮,触发javascript函数create_note ,我收到403错误。 必须是csrf问题..

我试图通过修改就绪function来解决这个问题

 $(document).ready(function(){ $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); $("#create").click(create_note); }); 

但它没有用..我仍然得到403 error

所以,我试图修改ajax调用中的数据

 var create_note = function() { var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'}; ... var args = { type:"POST", url:"/create/", data:data, complete:done }; $.ajax(args); }; 

仍然会导致403错误..

请告诉我应该怎么做才能纠正这个..我看到了关于这个的django文档 ,但我很困惑如何利用它。我应该复制整个jQuery(document).ajaxSend(...代码到我的javascript文件..我真的很困惑..

你需要( 作为你建议链接的文件 )复制整个ajaxSend方法……

你不需要以任何方式修改它 – 它是一个完整的解决方案 – ajaxSend方法实际上是ajaxSend事件的事件处理程序。 当你在jQuery中使用.ajax方法时会触发它。 请在此处查看ajaxSend文档

上述文档中链接的方法会将正确的X-CSRFToken标头附加到您的AJAX请求中。 然后,您可以使用第一种方法发送AJAX请求。