13 Stimmen

Wie aktualisiert man eine Django-Seite, ohne die Seite neu zu laden?

Meine Django-App zeigt Daten aus einer Datenbank an. Diese Daten ändern sich ohne Benutzereingriff, d.h. hinter den Kulissen. Bei jeder Änderung möchte ich, dass die Webseite die geänderten Abschnitte aktualisiert, ohne dass die gesamte Seite neu geladen werden muss.

Da fällt mir natürlich AJAX ein. Wenn die Seite anfänglich geladen wird (oder manuell, später vollständig neu geladen), lädt die gerenderte Vorlage ein JavaScript, das window.onload = update("all"), update(...) ausführt, was wiederum eine Reihe von XMLHTTPRequests auslöst, die wiederum Daten zurückgeben, die in HTML-Teile für die entsprechenden Abschnitte umgewandelt werden. Alles funktioniert gut. Beim ersten Laden der Seite.

Jetzt befinde ich mich in einer Python-Funktion, die ein neues Objekt in der Datenbank speichert.

Wie kann ich den Browser anweisen, update(...) auszuführen?

Muss ich irgendwie manuell eine Anfrage an eine URL stellen, die einer Ansicht zugeordnet ist, die wiederum eine Vorlage rendert, die den JavaScript-Code enthält, um update(...) auszuführen? Oh je!

Ich habe das Gefühl, dass ich nicht die üblichen Ansätze verfolge. Vielleicht stehe ich einfach zu dicht vor dem Problem.

Kann mir jemand helfen?

9voto

Lou Franco Punkte 85315

Aktualisierung 2021: Kanäle nutzen: https://channels.readthedocs.io/en/latest/

Sie haben zwei Möglichkeiten

  1. Der Browser soll mit setTimeout() abfragen.
  2. Informieren Sie sich über Comet, eine Technik zur Übertragung von Daten vom Server zum Browser.

Hier ist ein Artikel über Komet in Django

7voto

Javier Punkte 58737

Zwei Ansätze:

  1. einfach die Datenbank aktualisieren und bis zur nächsten AJAX-Abfrage warten. Das bedeutet, dass die Abfrage in regelmäßigen Abständen erfolgen sollte, Sie müssen zwischen Unmittelbarkeit und Serverlast abwägen. Es hilft ein wenig, wenn Sie eine billige Abfrage machen können, um zu überprüfen, ob es eine Aktualisierung gegeben hat. Vielleicht sollten Sie diese Prüfung nur auf Memcached stützen, anstatt die DB anzufordern.

  2. verwenden. Komet . Kurz gesagt: Der Client führt eine AJAX-Abfrage durch und fragt nach der Aktualisierung. Der Server sieht, dass es keine Aktualisierung gibt und antwortet nicht. Stattdessen wird die Verbindung für eine lange Zeit offen gehalten. Irgendwann kommt entweder die Aktualisierung und der Server antwortet endlich, oder der Client nimmt eine Auszeit und bricht die Verbindung ab. In diesem Fall sollte der Client die Abfrage sofort wiederholen, um weiter auf die Aktualisierung zu warten.

0voto

Neha Singla Punkte 65

Sie können auch die Websocket-API verwenden https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API . Mit dieser API können Sie Nachrichten an einen Server senden und ereignisgesteuerte Antworten erhalten, ohne den Server auf eine Antwort abfragen zu müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X