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
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