2009-11-18 5 views
0

Мое приложение в Django может создать очень большие SQL-запросы. В настоящее время я использую объект HttpRequest, для данных, которые мне нужны, а затем HttpResponse, чтобы вернуть то, что я хочу показать пользователю.Обновление HttpResponse Каждые несколько секунд

Очевидно, что я могу позволить Пользователю подождать минуту, пока эти многочисленные наборы запросов выполняются и извлекаются из базы данных, а затем возвращают эту монолитную HTML-страницу.

В идеале, я хотел бы обновить страницу, когда я хочу, что-то вроде:

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. 

Возможно ли это?

ответ

4

я недавно обнаружил, что HttpResponse может быть генератором:

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

Это будет постепенно возвращать результаты mygenerator на страницу, завернутый в HTML <li> для отображения.

2

Ваш подход немного испорчен. У вас есть несколько разных вариантов.

Первый, вероятно, самый простой - использовать AJAX и HTTPRequest. Имейте ряд из них, каждый из которых приводит к одному Table.objects.filter(someObjectForFilter[i]).. По завершении каждого сценария завершается и возвращает результаты клиенту. Клиент обновляет пользовательский интерфейс и инициирует следующий запрос с помощью другого вызова AJAX.

Другим методом является использование пакетной системы. Это немного тяжелее, но, вероятно, лучший дизайн, если вы идете на реальный «тяжелый подъем» в базе данных. Вам понадобится запустить пакетный демон (для этого требуется простой cron-зонд) для сканирования входящих задач. Пользователь хочет что-то выполнить, поэтому их запрос отправляет эту задачу (это может быть просто строка в базе данных с их параметрами). Демон захватывает его, обрабатывает его полностью автономно - возможно, даже на другой машине - и обновляет строку задачи, когда она завершена с результатами. Затем клиент может периодически обновляться, чтобы проверить статус этой строки с помощью традиционных или AJAX-методов.

Смежные вопросы