Maison >interface Web >js tutoriel >Comment utiliser la méthode post ajax dans le framework Django
Django est un framework d'application web open source écrit en Python. Cet article vous présentera comment utiliser la méthode post ajax dans le framework Django. Les amis intéressés peuvent venir apprendre ensemble
Django est un open source. Cadre d'application Web source. Cadre d'application Web de code source, écrit en Python. Le modèle de conception du logiciel MVC est adopté, à savoir le modèle M, la vue V et le contrôleur C. Il a été développé à l'origine pour gérer certains des sites Web basés sur le contenu d'actualités de Lawrence Publishing Group, c'est-à-dire le logiciel CMS (Content Management System). Et a été publié sous licence BSD en juillet 2005. Ce cadre porte le nom du guitariste de jazz manouche belge Django Reinhardt.
Aujourd'hui, j'ai trouvé un problème en essayant d'appeler l'ajax de jQuery. Le serveur peut revenir normalement en utilisant la méthode GET, mais pas la méthode POST. Plus tard, le test de la méthode POST basée sur les formulaires n'a pas non plus fonctionné. Tant que le POST est requis, une erreur HTTP 403 sera signalée ! Très étrange. . .
Après avoir recherché de nombreuses informations sur Internet, il s'avère que cela est dû à un problème avec le mécanisme de protection Cross Site Request Forgery de Django. Ce mécanisme vise à se protéger contre les attaques CSRF. Qu'est-ce qu'une attaque crsf ? Le blog Taolin a une explication relativement simple. Solution Le site officiel de Django a fourni http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ Après modification selon les instructions, ajax peut être publié en douceur.
La méthode spécifique consiste à résoudre d'abord le POST du formulaire. Recherchez MIDDLEWARE_CLASSES dans le fichier settings.py et ajoutez un middleware : 'django.middleware.csrf.CsrfViewMiddleware'. Le code modifié est le suivant :
Code Python
.MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', #加入这个中间件 )
Après cette modification, le problème du HTTP 403 pour la soumission du formulaire POST peut être résolu. Il ne suffit pas de modifier la soumission post-ajax de cette manière. Vous devez également mettre en place un processus de traitement des cookies pour chaque soumission. Autrement dit, chaque fois que vous soumettez, ce processus est déclenché et le jeton csrf est ajouté à l'en-tête http soumis. Heureusement, si vous utilisez jQuery pour gérer ajax, Django envoie directement un morceau de code pour résoudre le problème. Mettez-le dans un fichier js séparé et introduisez-le dans la page html. Notez que ce fichier js doit être importé après l'importation du fichier jquery js. J'ai copié le code directement, comme suit :
Code Js
$('html').ajaxSend(function(event, xhr, settings) { function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { // Only send the token to relative URLs i.e. locally. xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } });
Après tous ces ennuis, je peux enfin utiliser ajax pour communiquer normalement avec Django.
Utilisation d'ajax dans Django
Le code ajax front-end est le suivant :
$.ajax({ type:'GET', url:'/store/ds_mgmt_wx/ajax_handle', dataType:'html', success:function(data) { alert(data); }, error:function(data) { alert(data); } });
La méthode de retour du code correspondant dans le backend est la suivante :
if act_job == 'ajax_handle': return HttpResponse('ajax_handle')
Ce qui précède est ce que j'ai compilé pour tout le monde, j'espère. cela sera utile à tout le monde à l’avenir.
Articles connexes :
Explication détaillée d'ajax + jtemplate pour implémenter la pagination dynamique
Une implémentation simple d'Ajax montrant des progrès pendant le processus de demande
JQuery Ajax génère dynamiquement une table
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!