2016-05-03 11 views
0

Ich mache Ajax-Aufruf Daten aus der Funktion im Hinblick auf Datei-Code aus dem Blickfeld Datei geschrieben zu holen:ajax django 403 verboten Fehler

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) 

seine entsprechende URL ist: url(r'^graph/(?P<node_id>[^/]+)$', 'adminRenderConceptGraph', name='adminRenderConceptGraph'),

der Ajax-Code verwendet ist:

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

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

    }, 

}); 

Ich bekomme einen 403 verbotenen Fehler.

+0

Zeigen Sie Ihren Js-Code. –

Antwort

2

Der Fehler war aufgrund CSRF-Token fehlt. Hinzufügen einer einfachen Linie half.

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

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

    }, 

}); 
0

Ohne Ihren js-Code kann ich nur raten, was das Problem ist. Dies ist höchstwahrscheinlich auf die CSRF protection zurückzuführen. XHR sendet eine Anfrage ohne das csrf-Token. Wenn Sie jQuery verwenden, fügte hinzu, dass sich am Anfang des Skripts helfen:

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'); 
     } 
    } 
}); 
Verwandte Themen