Я новичок в разработке Django и хотел бы знать, возможно ли инициировать обновление веб-страницы на стороне клиента.

Мой сценарий: веб-страница 1 просматривается клиентами.

Я обновил некоторые данные в базе данных и хочу обновить view.py для получения новых данных из базы данных и обновить веб-страницу клиентов для отображения новой информации.

Как мне этого добиться?

Спасибо.

С уважением.

1
E Heng 23 Окт 2018 в 15:55

2 ответа

Лучший ответ

Есть несколько вариантов:

  • Добавьте на свою страницу скрипт, который каждые несколько секунд опрашивает (ajax) ваш сервер на предмет последних данных и обновляет данные на месте (без обновления страницы). Для этого вы должны создать представление в Django, которое возвращает данные в формате JSON, и ваш javascript заменит данные в HTML. Плюсы: отличный пользовательский интерфейс, страница остается доступной. Против: Не сразу, вам нужно подумать о масштабируемости, поскольку каждая открытая страница будет постоянно опрашивать ваш сервер, но кеширование ответа должно быть простым.

  • Добавьте скрипт, который просто опрашивает, нужно ли обновлять страницу. Он отправит какой-то номер версии токена, идентифицирующий текущие данные на странице, и ваше представление Django может определить, нужно ли обновлять страницу. Затем сценарий просто вызовет location.reload() для обновления страницы. Плюсы: нет необходимости извлекать данные, состояние обновления можно легко кэшировать, Минусы: все еще не сразу, обновление страницы происходит тогда, когда пользователь этого не ожидал.

  • Используйте веб-сокет, чтобы иметь открытое постоянное соединение с вашим сервером, через которое вы можете отправлять новые данные (или просто событие: «пожалуйста, обновите»). Плюсы: лучший опыт, немедленное обновление. Минусы: не работает в старых браузерах, сложно реализовать и развернуть. django-channels будет хорошим стартером.

1
dirkgroten 23 Окт 2018 в 13:46
location.reload() 

Внутри HTML внутри шаблона Django должно хватить. Это нужно, чтобы стрелять по определенному событию? Если это так, вам нужно найти способ активировать location.reload(), который в этом случае вам нужно будет указать еще несколько деталей. Но, по сути, у вас просто есть JavaScript, который прослушивает событие, чтобы перезагрузить вашу веб-страницу. Если вы хотите продвинуться дальше, я бы посмотрел на каналы Django.

0
Scott Skiles 23 Окт 2018 в 12:58
52949655