Maison  >  Article  >  interface Web  >  Comment utiliser la méthode post ajax dans le framework Django (tutoriel graphique)

Comment utiliser la méthode post ajax dans le framework Django (tutoriel graphique)

亚连
亚连original
2018-05-22 09:13:571670parcourir

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 POST basée sur un formulaire 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 + &#39;=&#39;)) { 
     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(&#39;csrftoken&#39;)); 
 } 
});

Après tous ces ennuis, je peux utiliser ajax pour communiquer normalement avec Django.

Utilisation d'ajax dans Django

Le code ajax du front-end est le suivant :

$.ajax({
 type:&#39;GET&#39;,
 url:&#39;/store/ds_mgmt_wx/ajax_handle&#39;,
 dataType:&#39;html&#39;,
 success:function(data)
  {
   alert(data);
  },
 error:function(data)
 {
  alert(data); 
 }
});

La méthode de retour du code correspondant dans le back-end est le suivant :

if act_job == &#39;ajax_handle&#39;:
  return HttpResponse(&#39;ajax_handle&#39;)

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles associés :

Méthode Django pour obtenir un objet post-complexe ajax (tutoriel graphique)

Utiliser Ajax pour mettre à jour partiellement la page Razor (Tutoriel image et texte)

À propos du problème de la transmission de données en arrière-plan via une réponse en Ajax (y compris le code, l'analyse détaillée)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn