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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top