Сохранение состояний флажков на одной странице с результатами запроса

StackOverflow https://stackoverflow.com/questions/1093539

  •  11-09-2019
  •  | 
  •  

Вопрос

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

Какое самое простое решение «запомнить» состояние флажков?Я просмотрел документацию по django, но в примерах используются только переменная и IF для одной текстовой формы.Конечно, мне не нужно проверять, установлен ли каждый флажок в запросе?Кроме того, моя форма была создана по индивидуальному заказу, а не с использованием форм Django.

В конце концов, я планировал использовать JSON для страницы и обновлять только таблицу, и это решило бы эту проблему, но я не уверен, что это приведет к появлению еще многих, например, кнопки «Назад», не работающей для предыдущих поисков.

Это было полезно?

Решение

«Какое самое простое решение «запомнить» состояние флажков?»

Веб-транзакции не имеют состояния.

Существует несколько распространенных способов реализации состояния.

  1. Сессии.Если ваш пользователь вошел в систему, у него есть сеанс.Храните вещи в своей сессии.Форма, которую они POST, попадает в сеанс.Затем его можно получить, чтобы отправить им новую форму.

  2. Печенье.Сеансы используют файлы cookie.Вы можете использовать файлы cookie вручную.Здесь у вас есть два варианта.

    • Поместите информацию о флажке формы в файл cookie.Отправьте его вместе с ответом.Проверяйте наличие файла cookie в каждом запросе, чтобы знать, чем заполнить форму.

    • Поместите сеансовый ключ в файл cookie.Это то, что Django делает для вас.Не реализуйте это самостоятельно.

  3. Строки запроса в URL-адресе.У вас есть те же два варианта, что и в случае с файлами cookie.Либо сделайте настройки старой строкой base64, либо передайте идентификатор, который заменяет сеанс.

Другие советы

Есть способы решить проблему с кнопкой «Назад» (хеш-теги и тому подобное, добавленные к URL-адресу).Однако я всегда добивался этого именно таким путем.По сути, я бы передал флажки как массив в POST, а затем, когда вы приступите к их созданию, просто создаю цикл, который создаст все нужные вам флажки, и проверю POST, чтобы узнать, проверено оно или нет.Кроме этого, я не знаю.

Использование GET?Хороший.Доступ к флажкам аналогичен доступу к данным текстового поля.

request.GET['ваше поле']

Используйте инструкции печати для проверки информации, доступной в GET.

запрос на печать.GET['ваше поле']

Если бы вы использовали объект формы, вы могли бы просто передать запрос конструктору и покончить с этим.Если вы делаете это вручную, вам придется немного поработать с сеансом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top