Heim > Web-Frontend > js-Tutorial > So verwenden Sie die Ajax-Post-Methode im Django-Framework (grafisches Tutorial)

So verwenden Sie die Ajax-Post-Methode im Django-Framework (grafisches Tutorial)

亚连
Freigeben: 2018-05-22 09:13:57
Original
1688 Leute haben es durchsucht

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 dem Login kopieren

Nach dieser Änderung kann das Problem von HTTP 403 für die formularbasierte 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 wie folgt direkt 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;)); 
 } 
});
Nach dem Login kopieren

Nach all dieser Fummelei 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); 
 }
});
Nach dem Login kopieren

Die Rückgabemethode des entsprechenden Codes im Hintergrund -Ende lautet wie folgt:

if act_job == &#39;ajax_handle&#39;:
  return HttpResponse(&#39;ajax_handle&#39;)
Nach dem Login kopieren

Das oben Gesagte habe ich für Sie zusammengestellt. Ich hoffe, es wird Ihnen in Zukunft hilfreich sein.

Verwandte Artikel:

Django-Methode zum Erhalten eines Ajax-Post-Complex-Objekts (grafisches Tutorial)

Verwenden Sie Ajax, um die Razor-Seite teilweise zu aktualisieren (Bild- und Text-Tutorial)

Über das Problem der Übertragung von Daten im Hintergrund durch Antwort in Ajax (einschließlich Code, detaillierte Analyse)

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage