[PYTHON] Essayez Ajax sur la page Django

Lorsque j'essaye de POST avec Javascript, les contre-mesures CSRF de Django peuvent être interceptées et échouer, mais la documentation officielle décrit correctement les contre-mesures. http://docs.djangoproject.jp/en/latest/ref/contrib/csrf.html?highlight=csrf#ajax

De plus, j'ai téléchargé une copie sur Github afin qu'elle puisse être réutilisée, donc si vous souhaitez l'utiliser, veuillez. https://github.com/juniskw/django_tools/blob/master/csrf_token_ajax.js

Exemple: Une application qui vous alerte en ajoutant "!!!" aux caractères POSTÉS.

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 en un clic
		$.ajax({
			'url':$('form#surprise_fm').attr('action'),
			'type':'POST',
			'data':{
				'your_txt':$('#your_txt').val(),
			},
			'dataType':'json',
			'success':function(response){  //C'est un processus qui fonctionne lorsque la communication est réussie et que la réponse renvoyée est entrée dans l'argument
				alert(response.your_surprise_txt);  //Extraire les données de la réponse et de l'alerte
			},
		});
		return false;
	});
});
</script>

urls.py

#...
url(r'^surprise/', 'views.for_ajax'),
#...

views.py

def for_view(req):    #Fonction pour afficher la vue
	return render(req,'surprise.html')

def for_ajax(req):    #Des fonctions qui répondent à AJAX
	import json
	from django.http import HttpResponse,Http404

	if req.method == 'POST':
		txt = req.POST['your_txt']  #Obtenir des données POST
		surprise_txt = txt + "!!!"  #En traitement

		response = json.dumps({'your_surprise_txt':surprise_txt,})  #Convertir au format JSON ...

		return HttpResponse(response,mimetype="text/javascript")  #revenir. JSON est-il traité comme javascript?
	
    else:
		raise Http404  #La requête GET est traitée comme 404, mais en réalité, elle peut ne pas être nécessaire

Si vous réécrivez une partie de js comme suit, vous pouvez simplement mettre ** csrf_token ** dans le formulaire sans aucun problème.

$.ajax({
    // ...
    'data':$('form#surprise_fm').serialize(),
    // ...
});

** serialize ** est probablement une méthode qui rassemble tous les éléments d'entrée du formulaire sous la forme ** {name: value, ...} **. Le ** csrf_token ** de Django ressemble à un ** élément d'entrée de type caché ** si vous révélez les graines, donc cette méthode pourrait fonctionner comme un traitement de formulaire normal.

Recommended Posts

Essayez Ajax sur la page Django
Page DJango publiée sur heroku: Practice
Déployer l'application Django sur Heroku [Partie 2]
Réagir → Ajax → Django sur les notes d'implémentation Linux
Déployer l'application Django sur Heroku [Partie 1]
Essayez d'accéder à l'API Spotify dans Django.
Python: essayez d'utiliser l'interface utilisateur sur Pythonista 3 sur iPad
Essayez CI le code python poussé sur GitHub.
Personnalisez la page modèle de l'écran d'administration de Django
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Essayez d'estimer le nombre de likes sur Twitter
Essayez Debian + Python 3.4 + django1.7 ……
Faire du modèle une chaîne sur le modèle HTML Django
Page DJango publiée sur heroku: Préparation mon point addictif
Essayez d'utiliser Django templates.html
Hello World avec Django
[Django] Renommer le projet
Essayez FEniCS sur Windows!
Essayez Poerty sur Windows
Notes diverses sur le déploiement de l'application django sur Heroku
[Django] Comment rediriger les utilisateurs non connectés vers la page de connexion
Installez django sur python + anaconda et démarrez le serveur
Essayez deepdream sur Mac
Essayez d'utiliser le framework Web Python Django (2) - Regardez setting.py
Jusqu'au début du tutoriel django avec pycharm sous Windows
Je n'arrive pas à me connecter à la page d'administration avec Django 3
Essayez StyleGAN avec Google Colaboratory
Essayez d'utiliser l'API Twitter
Essayez d'utiliser OpenCV sur Windows
[Django] Remarques sur l'utilisation de django-debug-toolbar
Installez JDK sur Linux
Essayez le serveur Taxii (1. Paramètres du serveur)
Essayez «100 coups sur la science des données» ①
Essayez d'utiliser l'API Twitter
Développement de l'environnement Django sur Windows 10
Installez Django sur Mac
Essayez d'utiliser l'API PeeringDB 2.0
Regardez la vidéo sur Fedora31
Collez le lien sous Linux
Hello World (débutant) avec Django
Essayez de doubler le curseur PyODE
Premiers pas avec le framework Python Django sur Mac OS X
Installez rapidement OpenCV2.4 (+ python) sur OS X et essayez l'exemple
Django: fait varier le nombre de formulaires enfants en fonction du nombre d'éléments d'entrée
[Django] Corrige le pluriel du nom du modèle sur l'écran de gestion
Déguisez l'herbe sur GitHub et essayez de devenir ingénieur.
[Django] Afficher les données d'inscription associées aux utilisateurs sur le formulaire d'inscription / d'édition (formulaire)
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django