Maison > interface Web > js tutoriel > le corps du texte

Comment utiliser la méthode post ajax dans le framework Django

亚连
Libérer: 2018-05-25 09:42:29
original
2859 Les gens l'ont consulté

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', #加入这个中间件 
)
Copier après la connexion


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 + &#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;)); 
 } 
});
Copier après la connexion

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:&#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); 
 }
});
Copier après la connexion

La méthode de retour du code correspondant dans le backend est la suivante :

if act_job == &#39;ajax_handle&#39;:
  return HttpResponse(&#39;ajax_handle&#39;)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!