Heim  >  Artikel  >  Web-Frontend  >  So verwenden Sie die Ajax-Post-Methode im Django-Framework

So verwenden Sie die Ajax-Post-Methode im Django-Framework

亚连
亚连Original
2018-05-25 09:42:292861Durchsuche

Django ist ein in Python geschriebenes Open-Source-Webanwendungs-Framework. In diesem Artikel erfahren Sie, wie Sie die Ajax-Post-Methode im Django-Framework verwenden.

Django ist ein offenes Quell-Webanwendungs-Framework. Quellcode-Webanwendungs-Framework, geschrieben in Python. Das MVC-Software-Entwurfsmuster wird übernommen, nämlich Modell M, Ansicht V und Controller C. Es wurde ursprünglich entwickelt, um einige der auf Nachrichteninhalten basierenden Websites der Lawrence Publishing Group zu verwalten, also eine CMS-Software (Content Management System). Und wurde im Juli 2005 unter der BSD-Lizenz veröffentlicht. Dieser Rahmen ist nach dem belgischen Gypsy-Jazz-Gitarristen Django Reinhardt benannt.

Heute habe ich ein Problem festgestellt, als ich versuchte, den Ajax von jQuery aufzurufen. Der Server kann normal mit der GET-Methode zurückkehren, aber nicht mit der POST-Methode. Später funktionierte auch das Testen der formularbasierten POST-Methode nicht. Solange POST erforderlich ist, wird ein HTTP 403-Fehler gemeldet! Sehr seltsam. . .

Nachdem ich viele Informationen im Internet durchsucht hatte, stellte sich heraus, dass es sich um ein Problem mit dem Cross Site Request Forgery-Schutzmechanismus von Django handelte. Dieser Mechanismus dient dem Schutz vor CSRF-Angriffen. Was ist ein CRSF-Angriff? Der Taolin-Blog hat eine relativ einfache Erklärung. Die offizielle Website von Django bietet http://docs.djangoproject.com/en/dev/ref/contrib/csrf/. Nach der Änderung gemäß den Anweisungen kann Ajax problemlos veröffentlicht werden.

Die spezifische Methode besteht darin, zuerst den POST des Formulars zu lösen. Suchen Sie MIDDLEWARE_CLASSES in der Datei „settings.py“ und fügen Sie eine Middleware hinzu: „django.middleware.csrf.CsrfViewMiddleware“. Der geänderte Code lautet wie folgt:

Python-Code

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', #加入这个中间件 
)


Nach dieser Änderung kann das Problem von HTTP 403 für die Formular-POST-Übermittlung gelöst werden. Es reicht nicht aus, nur die Post-Übermittlung von Ajax auf diese Weise zu ändern. Sie müssen außerdem für jede Übermittlung einen Cookie-Verarbeitungsprozess einrichten. Das heißt, bei jeder Übermittlung wird dieser Vorgang ausgelöst und das CSRF-Token zum übermittelten HTTP-Header hinzugefügt. Wenn Sie jQuery zur Verarbeitung von Ajax verwenden, sendet Django glücklicherweise direkt einen Codeabschnitt, um das Problem zu lösen. Fügen Sie es in eine separate JS-Datei ein und fügen Sie es in die HTML-Seite ein. Beachten Sie, dass diese JS-Datei nach dem Import der JQuery-JS-Datei importiert werden muss. Ich habe den Code direkt wie folgt kopiert:

Js-Code

$('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;)); 
 } 
});

Danach Nach viel Mühe kann ich endlich Ajax verwenden, um normal mit Django zu kommunizieren.

Verwendung von Ajax in Django

Der Front-End-Ajax-Code lautet wie folgt:

$.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); 
 }
});

Die Rückgabemethode des entsprechenden Codes im Backend lautet wie folgt:

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

Das Obige habe ich für alle zusammengestellt an alle in der Zukunft.

Verwandte Artikel:

Detaillierte Erklärung von Ajax +jtemplate zur Implementierung von dynamischem Paging

Eine einfache Implementierung von Ajax, die den Fortschritt zeigt während des Anforderungsprozesses

JQuery Ajax generiert dynamisch eine Tabelle

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Ajax-Post-Methode im Django-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn