[PYTHON] Probieren Sie Ajax auf der Django-Seite aus

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

Beispiel: Eine App, die Sie benachrichtigt, indem sie den geposteten Zeichen "!!!" hinzufügt.

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

Probieren Sie Ajax auf der Django-Seite aus
DJango-Seite veröffentlicht auf Heroku: Practice
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Reagieren Sie → Ajax → Django auf Linux-Implementierungshinweise
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Versuchen Sie, die Spotify-API in Django zu aktivieren.
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Probieren Sie CI den Push-Python-Code auf GitHub aus.
Passen Sie die Modellseite des Django-Verwaltungsbildschirms an
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Machen Sie das Modell zu einer Zeichenfolge in der Django-HTML-Vorlage
DJango-Seite auf Heroku veröffentlicht: Vorbereitung mein Suchtpunkt
Versuchen Sie es mit Django templates.html
Hallo Welt mit Django
[Django] Benennen Sie das Projekt um
Probieren Sie FEniCS unter Windows aus!
Versuchen Sie Poerty unter Windows
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
[Django] So leiten Sie nicht angemeldete Benutzer zur Anmeldeseite um
Installieren Sie django auf Python + Anaconda und starten Sie den Server
Versuchen Sie Deepdream auf dem Mac
Versuchen Sie es mit dem Python-Webframework Django (2). Schauen Sie sich settings.py an
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Probieren Sie StyleGAN mit Google Colaboratory aus
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit OpenCV unter Windows
[Django] Hinweise zur Verwendung der Django-Debug-Symbolleiste
Installieren Sie JDK unter Linux
Probieren Sie den Taxii-Server aus (1. Servereinstellungen)
Versuchen Sie "100 Schläge auf Data Science" ①
Versuchen Sie es mit der Twitter-API
Entwicklung der Django-Umgebung unter Windows 10
Installieren Sie Django auf dem Mac
Versuchen Sie es mit der PeeringDB 2.0-API
Sehen Sie sich das Video auf Fedora31 an
Fügen Sie den Link unter Linux ein
Hallo Welt (Anfänger) mit Django
Versuchen Sie, den PyODE-Schieberegler zu verdoppeln
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
Installieren Sie OpenCV2.4 (+ Python) schnell unter OS X und probieren Sie das Beispiel aus
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
[Django] Korrigieren Sie die Pluralform des Modellnamens auf dem Verwaltungsbildschirm
Verkleide das Gras auf GitHub und versuche Ingenieur zu werden.
[Django] Registrierungsdaten für Benutzer im Registrierungs- / Bearbeitungsformular (Formular) anzeigen
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte