Как обновить страницу Django без перезагрузки страницы?
Приложение My Django отображает данные из базы данных. Эти данные изменяются без вмешательства пользователя, то есть за кулисами. Всякий раз, когда он изменяется, я хотел бы, чтобы веб-страница обновляла измененные разделы без полной перезагрузки страницы.
Очевидно, AJAX приходит на ум. Когда страница загружается изначально (или вручную, полностью повторно загружается позже), обработанный шаблон загружает JavaScript, который запускает window.onload = update ( "все" ), обновление (...), в свою очередь, запускает ряд XMLHTTPRequests которые снова возвращают данные, которые преобразуются в фрагменты HTML для соответствующих разделов. Все работает нормально. При загрузке начальной страницы.
Теперь я нахожусь в функции Python, которая сохраняет новый объект в базе данных.
Как сообщить браузеру, что он запускает обновление (...)?
Нужно ли мне как-то вручную выдать запрос на URL-адрес, который сопоставляется с представлением, которое, в свою очередь, отображает шаблон, содержащий код JavaScript для запуска обновления (...)??? О, мой!
Мне кажется, что я не следую обычным подходам.
Может быть, я просто встаю перед проблемой.
Кто-нибудь может мне помочь?
Ответы
Ответ 1
два подхода:
-
просто обновите базу данных и дождитесь следующего запроса AJAX. это означает, что он должен периодически выполнять запрос, вам придется балансировать между непосредственностью и нагрузкой на сервер. это немного помогает, если вы можете сделать дешевый запрос, чтобы просто проверить, было ли обновление. возможно, сделать эту проверку, полагаться только на memcached, а не на DB
- используйте comet. Короче: клиент выполняет запрос AJAX с запросом обновления. сервер не видит обновления, поэтому он не отвечает. вместо этого соединение остается открытым в течение длительного времени. в конечном итоге либо произойдет обновление, и сервер, наконец, ответит, либо клиент истечет и убьет соединение. в этом случае клиент должен немедленно переиздать запрос, чтобы продолжать ожидание.
Ответ 2
У вас есть два варианта
- Попросите опрос браузера использовать setTimeout()
- Посмотрите на комету - это метод для передачи данных с сервера в браузер.
Здесь статья о комета в Django