Как обновить страницу Django без перезагрузки страницы?

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

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

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

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

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

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

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

Ответы

Ответ 1

два подхода:

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

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

Ответ 2

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

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

Здесь статья о комета в Django