Heim >Web-Frontend >js-Tutorial >So verwenden Sie die Ajax-Post-Methode im Django-Framework (grafisches Tutorial)
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 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 + '=')) { 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')); } });
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:'GET', url:'/store/ds_mgmt_wx/ajax_handle', dataType:'html', success:function(data) { alert(data); }, error:function(data) { alert(data); } });
Die Rückgabemethode des entsprechenden Codes im Hintergrund -Ende lautet wie folgt:
if act_job == 'ajax_handle': return HttpResponse('ajax_handle')
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)
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!