使用 jquery1.7.1 和 django1.3 ,我试图通过 ajax 发出帖子请求,在我在 web 上找到的一些教程代码中

$(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 View
(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的问题。。

我试图通过修改就绪函数来解决这个问题
$(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 doc 关于这个,但我很困惑如何使用它。我应该将整个 jQuery(document).ajaxSend(... 代码复制到我的 javascript 文件中..我在这里真的很困惑..

最佳答案

您需要( as the document you linked to suggests )复制整个 ajaxSend 方法......

您不需要以任何方式修改它——它是一个完整的解决方案——ajaxSend 方法实际上是 ajaxSend 事件的事件处理程序。当您在 jQuery 中使用 .ajax 方法时会触发它。 See the ajaxSend docs here

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

关于jquery - 带有ajax和django post的csrf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10562494/

10-11 14:04