Aktualisieren Sie alle paar Sekunden HttPresponse
-
20-09-2019 - |
Frage
Meine Bewerbung in Django kann Erstellen Sie einige sehr Big SQL -Abfragen. Ich benutze derzeit a HttpRequest
Objekt für die Daten, die ich benötige, dann a HttpResponse
, um das zurückzugeben, was ich dem Benutzer zeigen möchte.
Offensichtlich kann ich den Benutzer eine Minute warten lassen, während diese vielen Abfragenmengen aus der Datenbank ausgeführt und extrahiert werden, und dann diese monolothische HTML -Seite zurückgeben.
Idealerweise möchte ich die Seite aktualisieren, wenn ich will, so etwas wie:
For i,e in enumerate(example):
Table.objects.filter(someObjectForFilter[i]).
#Return the object to the page.
#Then Loop again, 'updating' the response after each iteration.
Ist das möglich?
Lösung
Ich habe kürzlich festgestellt, dass eine HTTPresponse ein Generator sein kann:
def myview(request, params):
return HttpResponse(mygenerator(params))
def mygenerator(params):
for i,e in enumerate(params):
yield '<li>%s</li>' % Table.objects.filter(someObjectForFilter[i])
Dies wird die Ergebnisse von zunehmend zurückgeben mygenerator
auf die Seite, eingewickelt in ein HTML <li>
Zur Ausstellung.
Andere Tipps
Ihr Ansatz ist etwas fehlerhaft. Sie haben einige verschiedene Optionen.
Das erste ist wahrscheinlich die einfachste - verwenden Sie Ajax und Httprequest. Haben Sie eine Reihe von diesen, von denen jeder zu einer einzigen führt Table.objects.filter(someObjectForFilter[i]).
. Nach Abschluss des Drehbuchs vervollständigt und gibt die Ergebnisse an den Client zurück. Der Client aktualisiert die Benutzeroberfläche und initiiert die nächste Abfrage über einen anderen AJAX -Anruf.
Eine andere Methode ist die Verwendung eines Stapelsystems. Dies ist ein bisschen kräftiger, aber wahrscheinlich ein besseres Design, wenn Sie in der Datenbank ein echtes "schweres Heben" haben. Sie benötigen einen Batch -Daemon (eine Cron -Sonde funktioniert gut dafür) nach eingehenden Aufgaben. Der Benutzer möchte etwas ausführen, sodass seine Anfrage diese Aufgabe unterbreitet (sie könnte einfach eine Zeile in einer Datenbank mit ihren Paramenten sein). Der Daemon greift es ab, verarbeitet es vollständig offline - vielleicht sogar durch eine andere Maschine - und aktualisiert die Aufgabenreihe, wenn sie mit den Ergebnissen komplett ist. Der Client kann dann regelmäßig aktualisiert werden, um den Status dieser Zeile über herkömmliche oder AJAX -Methoden zu überprüfen.