Wenn ich versuche, mit Javascript zu POSTEN, werden die CSRF-Gegenmaßnahmen von Django möglicherweise abgefangen und schlagen fehl, aber die offizielle Dokumentation beschreibt die Gegenmaßnahmen ordnungsgemäß. http://docs.djangoproject.jp/en/latest/ref/contrib/csrf.html?highlight=csrf#ajax
Außerdem habe ich eine Kopie auf Github hochgeladen, damit sie wiederverwendet werden kann. Wenn Sie sie also verwenden möchten, bitte. https://github.com/juniskw/django_tools/blob/master/csrf_token_ajax.js
surprise.html
<head>
<script type="text/javascript" src="{{STATIC_URL}}js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="https://raw.githubusercontent.com/juniskw/django_tools/master/csrf_token_ajax.js"></script>
</head>
<body>
<h1>Let's Surprise!</h1>
<form id="surprise_fm" action="surprise/" method="post">
<input id="your_txt" type="text" name="your_txt">
<input id="surprise_btn" type="submit">
</form>
</body>
<script>
$(document).ready(function() {
$('#surprise_fm').submit(function() { //AJAX mit einem Klick auf eine Schaltfläche
$.ajax({
'url':$('form#surprise_fm').attr('action'),
'type':'POST',
'data':{
'your_txt':$('#your_txt').val(),
},
'dataType':'json',
'success':function(response){ //Es ist ein Prozess, der funktioniert, wenn die Kommunikation erfolgreich ist und die zurückgegebene Antwort in das Argument eingegeben wird
alert(response.your_surprise_txt); //Extrahieren Sie Daten aus Antwort und Alarm
},
});
return false;
});
});
</script>
urls.py
#...
url(r'^surprise/', 'views.for_ajax'),
#...
views.py
def for_view(req): #Funktion zum Anzeigen der Ansicht
return render(req,'surprise.html')
def for_ajax(req): #Funktionen, die AJAX beantworten
import json
from django.http import HttpResponse,Http404
if req.method == 'POST':
txt = req.POST['your_txt'] #POST-Daten abrufen
surprise_txt = txt + "!!!" #wird bearbeitet
response = json.dumps({'your_surprise_txt':surprise_txt,}) #In JSON-Format konvertieren ...
return HttpResponse(response,mimetype="text/javascript") #Rückkehr. Wird JSON als Javascript behandelt?
else:
raise Http404 #Die GET-Anforderung wird als 404 behandelt, ist jedoch in der Realität möglicherweise nicht erforderlich
Wenn Sie einen Teil von js wie folgt umschreiben, können Sie ** csrf_token ** problemlos in das Formular einfügen.
$.ajax({
// ...
'data':$('form#surprise_fm').serialize(),
// ...
});
** serialize ** ist wahrscheinlich eine Methode, die alle Eingabeelemente im Formular im Formular ** {name: value, ...} ** zusammenfügt. Djangos ** csrf_token ** sieht aus wie ein ** verstecktes Eingabeelement **, wenn Sie die Seeds anzeigen, sodass diese Methode wie die normale Formularverarbeitung funktionieren kann.
Recommended Posts