Как обновить страницу Django без перезагрузки страницы? - PullRequest
13 голосов
/ 03 декабря 2009

Мое приложение Django отображает данные из базы данных. Эти данные изменяются без вмешательства пользователя, то есть негласно. Всякий раз, когда это изменяется, я хотел бы, чтобы веб-страница обновляла измененные разделы без полной перезагрузки страницы.

Очевидно, AJAX приходит на ум. Когда страница загружается изначально (или вручную, затем полностью перезагружается), представленный шаблон загружает JavaScript, который запускает window.onload = update ("all"), а update (...), в свою очередь, запускает несколько запросов XMLHTTPRequests. которые снова возвращают данные, которые преобразуются в фрагменты HTML для соответствующих разделов. Все работает отлично. При начальной загрузке страницы.

Теперь я нахожусь в функции Python, которая сохраняет новый объект в базе данных.

Как мне сказать браузеру запустить обновление (...)?

Нужно ли каким-то образом вручную отправлять запрос на URL-адрес, сопоставленный с представлением, которое, в свою очередь, отображает шаблон, содержащий код JavaScript для запуска обновления (...) ??? Боже мой!

Я чувствую, что не следую обычным подходам. Может быть, я просто стою, чтобы закрыть перед проблемой.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

7 голосов
/ 03 декабря 2009

У вас есть два варианта

  1. Опрос в браузере с использованием setTimeout ()
  2. Посмотрите на Comet - это методика передачи данных с сервера в браузер.

Вот статья о Комете в Джанго

6 голосов
/ 03 декабря 2009

два подхода:

  1. просто обновите базу данных и дождитесь следующего запроса AJAX. Это означает, что он должен выполнять запрос периодически, вам придется балансировать между оперативностью и нагрузкой на сервер. Немного поможет, если вы можете сделать дешевый запрос, чтобы просто проверить, было ли обновление. Может быть, сделать эту проверку полагаться только на memcached вместо того, чтобы идти в БД

  2. использование комета . Короче говоря: клиент делает AJAX-запрос с просьбой об обновлении. сервер видит, что обновления нет, поэтому не отвечает. Вместо этого соединение остается открытым долгое время. В конце концов, либо приходит обновление, и сервер, наконец, отвечает, либо клиент прерывает работу и разрывает соединение. В этом случае клиент должен немедленно повторить запрос, чтобы дождаться обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...