Auch wenn dies nicht ganz im Sinne von SO ist, ich liebe diese Frage, weil ich die gleichen Probleme hatte, als ich anfing, also werde ich Ihnen eine Kurzanleitung geben. Offensichtlich verstehen Sie die Prinzipien dahinter nicht (nehmen Sie es nicht als Beleidigung, aber wenn Sie es tun würden, würden Sie nicht fragen).
Django ist serverseitig . Angenommen, ein Client geht zu einer URL, Sie haben eine Funktion views
, die das, was er sieht, rendert und eine Antwort in HTML zurückgibt. Lassen Sie es uns in Beispiele aufteilen:
views.py:
def hello(request):
return HttpResponse('Hello World!')
def home(request):
return render_to_response('index.html', {'variable': 'world'})
index.html:
<h1>Hello {{ variable }}, welcome to my awesome site</h1>
urls.py:
url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),
Das ist ein Beispiel für die einfachste Verwendung. Going to 127.0.0.1:8000/hello
Mittel zur Anfrage - hello()
Funktion, zu gehen 127.0.0.1:8000/home
die zurückkehrenindex.html
die Variablen zurückgegeben und alle Variablen wie gewünscht ersetzt (wahrscheinlich wissen Sie das alles inzwischen).
Lassen Sie uns jetzt über AJAX sprechen . AJAX-Aufrufe sind clientseitiger Code, der asynchrone Anforderungen ausführt. Das klingt kompliziert, bedeutet aber einfach, dass es im Hintergrund eine Anfrage für Sie ausführt und dann die Antwort bearbeitet. Wenn Sie also einen AJAX-Aufruf für eine URL ausführen, erhalten Sie dieselben Daten, die Sie als Benutzer erhalten würden, wenn Sie an diesen Ort gehen.
Zum Beispiel ein AJAX-Aufruf an 127.0.0.1:8000/hello
das gleiche Ergebnis zurück, als ob Sie es besucht hätten. Nur dieses Mal haben Sie es in einer JavaScript-Funktion und können damit umgehen, wie Sie möchten. Schauen wir uns einen einfachen Anwendungsfall an:
$.ajax({
url: '127.0.0.1:8000/hello',
type: 'get', // This is the default though, you don't actually need to always mention it
success: function(data) {
alert(data);
},
failure: function(data) {
alert('Got an error dude');
}
});
Der allgemeine Prozess ist folgender:
- Der Anruf geht an die URL
127.0.0.1:8000/hello
als hätten Sie einen neuen Tab geöffnet und selbst gemacht.
- Wenn dies erfolgreich ist (Statuscode 200), führen Sie die Funktion für den Erfolg aus, die die empfangenen Daten alarmiert.
- Wenn dies fehlschlägt, führen Sie eine andere Funktion aus.
Was würde hier nun passieren? Sie würden eine Warnung mit "Hallo Welt" darin erhalten. Was passiert, wenn Sie einen AJAX-Anruf nach Hause tätigen? Gleiches gilt für Sie<h1>Hello world, welcome to my awesome site</h1>
.
Mit anderen Worten - AJAX-Anrufe sind nichts Neues. Sie sind nur eine Möglichkeit für Sie, dem Benutzer das Abrufen von Daten und Informationen zu ermöglichen, ohne die Seite zu verlassen, und sorgen für ein reibungsloses und sehr übersichtliches Design Ihrer Website. Einige Richtlinien, die Sie beachten sollten:
- Lernen Sie jQuery . Ich kann das nicht genug betonen. Sie müssen es ein wenig verstehen, um zu wissen, wie Sie mit den empfangenen Daten umgehen sollen. Sie müssen auch einige grundlegende JavaScript-Syntax verstehen (nicht weit von Python, Sie werden sich daran gewöhnen). Ich empfehle Envatos Video-Tutorials für jQuery nachdrücklich. Sie sind großartig und bringen Sie auf den richtigen Weg.
- Wann soll JSON verwendet werden? . Sie werden viele Beispiele sehen, in denen sich die von den Django-Ansichten gesendeten Daten in JSON befinden. Ich habe darauf nicht näher eingegangen, weil es nicht wichtig ist, wie es geht (es gibt viele Erklärungen) und viel wichtiger, wann . Und die Antwort darauf lautet: JSON-Daten sind serialisierte Daten. Das heißt, Daten, die Sie bearbeiten können. Wie bereits erwähnt, ruft ein AJAX-Aufruf die Antwort ab, als ob der Benutzer dies selbst getan hätte. Angenommen, Sie möchten sich nicht mit dem gesamten HTML-Code herumschlagen und stattdessen Daten senden (möglicherweise eine Liste von Objekten). JSON ist dafür gut geeignet, da es als Objekt gesendet wird (JSON-Daten sehen aus wie ein Python-Wörterbuch). Anschließend können Sie darüber iterieren oder etwas anderes tun, das das Durchsuchen von nutzlosem HTML überflüssig macht.
- Fügen Sie es zuletzt hinzu . Wenn Sie eine Web-App erstellen und AJAX implementieren möchten, tun Sie sich selbst einen Gefallen. Erstellen Sie zunächst die gesamte App ohne AJAX. Sehen Sie, dass alles funktioniert. Beginnen Sie dann und erst dann mit dem Schreiben der AJAX-Aufrufe. Das ist ein guter Prozess, mit dem Sie auch viel lernen können.
- Verwenden Sie die Entwicklertools von Chrome . Da AJAX-Aufrufe im Hintergrund ausgeführt werden, ist es manchmal sehr schwierig, sie zu debuggen. Sie sollten die Chrome-Entwicklertools (oder ähnliche Tools wie Firebug) und
console.log
Dinge zum Debuggen verwenden. Ich werde es nicht im Detail erklären, sondern nur googeln und es herausfinden. Es wäre sehr hilfreich für Sie.
- CSRF-Bewusstsein . Denken Sie zum Schluss daran, dass für Post-Anfragen in Django das erforderlich ist
csrf_token
. Bei AJAX-Aufrufen möchten Sie häufig Daten senden, ohne die Seite zu aktualisieren. Sie werden wahrscheinlich Probleme haben, bevor Sie sich endlich daran erinnern - warten Sie, Sie haben vergessen, das zu senden csrf_token
. Dies ist eine bekannte Straßensperre für Anfänger in der AJAX-Django-Integration, aber nachdem Sie gelernt haben, wie man es schön spielt, ist es ganz einfach.
Das ist alles, was mir in den Sinn kommt. Es ist ein großes Thema, aber es gibt wahrscheinlich nicht genug Beispiele. Arbeiten Sie sich einfach langsam dorthin vor, Sie werden es irgendwann bekommen.
csrf_token
wir diese Methode in Bezug auf Ihre Erwähnung umgehen? Wenn wir eine Beispielfunktion hättenajaxCall()
, könnten wir einfach die traditionelle Methode von so etwas verwenden<form onsubmit='ajaxCall();return false;'>
, oder?Neben der hervorragenden Antwort von yuvi möchte ich ein kleines spezifisches Beispiel hinzufügen, wie man damit in Django umgeht (über alle js hinaus, die verwendet werden). In diesem Beispiel wird
AjaxableResponseMixin
ein Autorenmodell verwendet und angenommen.Quelle: Django-Dokumentation, Formularverarbeitung mit klassenbasierten Ansichten
Der Link zu Version 1.6 von Django ist nicht mehr verfügbar und wurde auf Version 1.11 aktualisiert
quelle
Ich schreibe dies, weil die akzeptierte Antwort ziemlich alt ist und eine Auffrischung benötigt.
So würde ich Ajax 2019 in Django integrieren :) Und nehmen wir ein echtes Beispiel dafür, wann wir Ajax brauchen würden:
Nehmen wir an, ich habe ein Modell mit registrierten Benutzernamen und mit Hilfe von Ajax möchte ich wissen, ob ein bestimmter Benutzername vorhanden ist.
html:
Ajax:
urls.py:
views.py:
Auch render_to_response, das veraltet ist und durch render ersetzt wurde , und ab Django 1.7 anstelle von HttpResponse verwenden wir JsonResponse für die Ajax- Antwort. Da es mit einem JSON-Encoder geliefert wird, müssen Sie die Daten nicht serialisieren, bevor Sie das Antwortobjekt zurückgeben, es
HttpResponse
ist jedoch nicht veraltet.quelle
Einfach und nett. Sie müssen Ihre Ansichten nicht ändern. Bjax kümmert sich um alle Ihre Links. Schauen Sie sich das an: Bjax
Verwendungszweck:
Fügen Sie dies schließlich in den KOPF Ihres HTML-Codes ein:
Weitere Einstellungen finden Sie hier in der Demo: Bjax Demo
quelle
AJAX ist der beste Weg, um asynchrone Aufgaben auszuführen. Das Tätigen von asynchronen Anrufen wird häufig bei der Erstellung von Websites verwendet. Wir werden ein kurzes Beispiel nehmen, um zu erfahren, wie wir AJAX in Django implementieren können. Wir müssen jQuery verwenden, um weniger Javascript zu schreiben.
Dies ist das Kontaktbeispiel. Dies ist das einfachste Beispiel, mit dem ich die Grundlagen von AJAX und seine Implementierung in Django erläutere. In diesem Beispiel stellen wir eine POST-Anfrage. Ich folge einem Beispiel dieses Beitrags: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
Lassen Sie uns zunächst das Kontaktmodell mit grundlegenden Details erstellen.
forms.py
Erstellen Sie das Formular für das obige Modell.
views.py
Die Ansichten ähneln der grundlegenden funktionsbasierten Erstellungsansicht, aber anstatt mit dem Rendern zurückzukehren, verwenden wir die JsonResponse-Antwort.
urls.py
Lassen Sie uns die Route der obigen Ansicht erstellen.
Vorlage
Wenn Sie zum Frontend-Bereich wechseln, rendern Sie das Formular, das über dem Formular-Tag erstellt wurde, zusammen mit csrf_token und der Schaltfläche "Senden". Beachten Sie, dass wir die jquery-Bibliothek aufgenommen haben.
Javascript
Lassen Sie uns nun über den Javascript-Teil sprechen. Auf dem Formular senden wir eine Ajax-Anfrage vom Typ POST, nehmen die Formulardaten und senden sie an den Server.
Dies ist nur ein einfaches Beispiel für den Einstieg in AJAX mit Django. Wenn Sie mit mehreren weiteren Beispielen tauchen möchten, lesen Sie diesen Artikel: https://djangopy.org/learn/step-up-guide-to- Implementiere-Ajax-in-Django
quelle
Ich habe versucht, AjaxableResponseMixin in meinem Projekt zu verwenden, hatte jedoch die folgende Fehlermeldung erhalten:
Dies liegt daran, dass CreateView eine Umleitungsantwort zurückgibt, anstatt eine HttpResponse zurückzugeben, wenn Sie eine JSON-Anforderung an den Browser senden. Also habe ich einige Änderungen an der vorgenommen
AjaxableResponseMixin
. Wenn es sich bei der Anforderung um eine Ajax-Anforderung handelt, wird diesuper.form_valid
Methode nicht aufgerufen, sondern nurform.save()
direkt.quelle
Wenn wir Django verwenden:
Wenn Sie alte Daten behalten möchten, können Sie dies ohne Ajax tun. (Seite wird aktualisiert)
Oder Sie können mit Ajax tun (Seite wird nicht aktualisiert)
Wenn Sie Ajax verwenden, müssen Sie folgende Schritte ausführen:
Django unterscheidet sich von Ajax. Der Grund dafür ist folgender:
Meiner Meinung nach, wenn Sie Ajax überall verwenden möchten. Wenn Sie zuerst eine Seite mit Daten initialisieren müssen, können Sie Django mit Ajax verwenden. In einigen Fällen benötigen Sie jedoch nur eine statische Seite ohne Server. Sie müssen keine Django-Vorlage verwenden.
Wenn Sie nicht glauben, dass Ajax die beste Vorgehensweise ist. Sie können Django-Vorlage verwenden, um alles zu tun, wie Anime.
(Mein Englisch ist nicht gut)
quelle