Domanda

La mia applicazione in Django Potere Crea un po ' molto Grandi domande SQL. Attualmente uso un HttpRequest oggetto, per i dati di cui ho bisogno, quindi a HttpResponse, per restituire ciò che voglio mostrare l'utente.

Ovviamente, posso lasciare che l'utente attenda un minuto mentre queste serie di query vengono eseguite ed estratte dal database, quindi restituire questa pagina HTML monolotica.

Idealmente, vorrei aggiornare la pagina quando voglio, qualcosa del tipo:

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.

È possibile?

È stato utile?

Soluzione

Ho scoperto di recente che un HttPresponse può essere un generatore:

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])

Ciò restituirà progressivamente i risultati di mygenerator alla pagina, avvolto in un HTML <li> per il display.

Altri suggerimenti

Il tuo approccio è un po 'imperfetto. Hai alcune opzioni diverse.

Il primo è probabilmente il più semplice: usa Ajax e HttPrequest. Avere una serie di questi, ognuno dei quali si traduce in un singolo Table.objects.filter(someObjectForFilter[i]).. Al termine di ciascuno, lo script completa e restituisce i risultati al client. Il client aggiorna l'interfaccia utente e avvia la domanda successiva tramite un'altra chiamata AJAX.

Un altro metodo è utilizzare un sistema batch. Questo è un po 'più pesante, ma probabilmente un design migliore se stai andando per un vero "sollevamento pesante" nel database. Dovrai avere un demone batch in esecuzione (una sonda Cron funziona bene per questo) per le attività in arrivo. L'utente desidera eseguire qualcosa, quindi la loro richiesta presenta questa attività (potrebbe essere semplicemente una riga in un database con i loro parametri). Il demone lo afferra, lo elabora completamente offline - forse anche da una macchina diversa - e aggiorna la riga delle attività quando è completa dei risultati. Il client può quindi aggiornare periodicamente per verificare lo stato di quella riga, tramite metodi tradizionali o AJAX.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top