2016-04-12 6 views
0

Dies ist der Code, den ich versucht habe, ein csrf-Token zu einem Javascript-Formular hinzuzufügen.Django - Javascript - Csrf Token

function save() { 
    var form = document.createElement("form"); 
    console.log(form); 
    form.setAttribute('method', 'post'); 
    form.setAttribute('action', '/quiz_score/'); 
    document.body.appendChild(form); 
    var i = document.createElement("input"); 
    i.setAttribute('name', 'Score'); 
    i.setAttribute('value', ""+score); 
    i.setAttribute('name', 'csrfmiddlewaretoken'); 
    i.setAttribute('value', {% csrftoken %}); 
    form.appendChild(i); 
    form.submit(); 
} 

Können Sie irgendwelche Probleme damit sehen? Es hat einen Fehler und daher wird JS nicht ausgeführt.

Antwort

2

Die {% csrftoken %} Vorlage tagoutputs die tatsächliche Form-Tag (zB <input type='hidden' ... />.

Wenn Sie nur den Wert des Tokens möchten, verwenden Sie {{ csrf_token }} statt.

Wenn Sie das Formular mit einem Ajax-Anforderung einreichen, Sie .... könnte es einfacher, das CSRF-Token als Header zu senden, anstatt den Tag zu Ihrem Formular hinzugefügt See the docs Anweisungen

2

Sie haben 2 Fehler im Code Einfache Art und Weise sieht Code es versuchen:

var i = document.createElement("input"); 
i.setAttribute('name', 'Score'); 
i.setAttribute('value', ""+score); 
form.appendChild(i); 
var i = document.createElement("input"); 
i.setAttribute('name', 'csrfmiddlewaretoken'); 
i.setAttribute('value', '{{ csrf_token }}'); 
form.appendChild(i); 
+0

Nein, das funktioniert nicht. –

+0

@PhilipCrocker können Sie den Code von jsbin.com teilen –