簡體   English   中英

csrf與ajax和django帖子

[英]csrf with ajax and django post

使用jquery1.7.1和django1.3,我試圖通過ajax發布一個post請求,在我在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視圖

(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文檔 ,但我很困惑如何使用它。我應該復制整個jQuery(document).ajaxSend(...代碼到我的javascript文件..我真的很困惑..

你需要( 作為你建議鏈接的文件 )復制整個ajaxSend方法......

你不需要以任何方式修改它 - 它是一個完整的解決方案 - ajaxSend方法實際上是ajaxSend事件的事件處理程序。 它在jQuery中使用.ajax方法時觸發。 請在此處查看ajaxSend文檔

上述文檔中鏈接的方法會將正確的X-CSRFToken標頭附加到您的AJAX請求中。 然后,您可以使用第一種方法發送AJAX請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM