2016-05-03 59 views
0

我正在調用Ajax從視圖文件寫在視圖文件代碼的函數獲取數據:AJAX Django的403禁止錯誤

def adminRenderConceptGraph(request,group_id,node_id=None): 
    if request.is_ajax() and request.method == "POST": 
    group_name = u'home' 
    if node_id: 
    req_node = node_collection.one({'_id':ObjectId(node_id)}) 
    template = 'ndf/graph_concept.html' 
    variable = RequestContext(request, {'node':req_node }) 
    return render_to_response(template,variable) 

其對應的網址爲:url(r'^graph/(?P<node_id>[^/]+)$', 'adminRenderConceptGraph', name='adminRenderConceptGraph'),

Ajax代碼使用是:

$.ajax({ 
    type: "POST", 
    url: "/home/ajax/graph/"+ atr, 

    data:{ 
     group_id : '{{groupid}}', 
     node_id : atr 
    }, 
    success: function(result) { 
    alert(result) 

    }, 

}); 

我得到一個403禁止的錯誤。

+0

顯示您的js代碼。 –

回答

2

錯誤是由於csrf令牌丟失。添加一條簡單的線幫助。

$.ajax({ 
    type: "POST", 
    url: "/home/ajax/graph/"+ atr, 

    data:{ 
     group_id : '{{groupid}}', 
     csrfmiddlewaretoken: '{{ csrf_token }}', 
     node_id : atr 
    }, 
    success: function(result) { 
    alert(result) 

    }, 

}); 
0

沒有你的js代碼我只能猜測問題是什麼。這很可能是由於CSRF protection。 XHR發送一個沒有csrf-token的請求。如果您使用的是jQuery,那麼在腳本的開始部分可以提供幫助:

function getCookie(name) { 
    var cookieValue = null; 
    if(document.cookie && document.cookie != '') { 
     var cookies = document.cookie.split(';'); 
     for(var i = 0; i < cookies.length; i++) { 
      var cookie = jQuery.trim(cookies[i]); 
      if(cookie.substring(0, name.length + 1) == (name + '=')) { 
       cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
       break; 
      } 
     } 
    } 
    return cookieValue; 
} 

$.ajaxSetup({ 
    global: true, 
    beforeSend: function(xhr, settings) { 
     if(!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 
      xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
      xhr.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded; charset=UTF-8'); 
     } 
    } 
});