Сохранение состояний флажков на одной странице с результатами запроса
Вопрос
Я использую django и имею статическую веб-страницу с формой GET и около 30 флажками.Пользователь выбирает различные поля и нажимает кнопку поиска, и результат из базы данных возвращается на ту же страницу в таблице.Однако все флажки были сняты, поскольку HTML не имеет состояния.
Какое самое простое решение «запомнить» состояние флажков?Я просмотрел документацию по django, но в примерах используются только переменная и IF для одной текстовой формы.Конечно, мне не нужно проверять, установлен ли каждый флажок в запросе?Кроме того, моя форма была создана по индивидуальному заказу, а не с использованием форм Django.
В конце концов, я планировал использовать JSON для страницы и обновлять только таблицу, и это решило бы эту проблему, но я не уверен, что это приведет к появлению еще многих, например, кнопки «Назад», не работающей для предыдущих поисков.
Решение
«Какое самое простое решение «запомнить» состояние флажков?»
Веб-транзакции не имеют состояния.
Существует несколько распространенных способов реализации состояния.
Сессии.Если ваш пользователь вошел в систему, у него есть сеанс.Храните вещи в своей сессии.Форма, которую они POST, попадает в сеанс.Затем его можно получить, чтобы отправить им новую форму.
Печенье.Сеансы используют файлы cookie.Вы можете использовать файлы cookie вручную.Здесь у вас есть два варианта.
Поместите информацию о флажке формы в файл cookie.Отправьте его вместе с ответом.Проверяйте наличие файла cookie в каждом запросе, чтобы знать, чем заполнить форму.
Поместите сеансовый ключ в файл cookie.Это то, что Django делает для вас.Не реализуйте это самостоятельно.
Строки запроса в URL-адресе.У вас есть те же два варианта, что и в случае с файлами cookie.Либо сделайте настройки старой строкой base64, либо передайте идентификатор, который заменяет сеанс.
Другие советы
Есть способы решить проблему с кнопкой «Назад» (хеш-теги и тому подобное, добавленные к URL-адресу).Однако я всегда добивался этого именно таким путем.По сути, я бы передал флажки как массив в POST, а затем, когда вы приступите к их созданию, просто создаю цикл, который создаст все нужные вам флажки, и проверю POST, чтобы узнать, проверено оно или нет.Кроме этого, я не знаю.
Использование GET?Хороший.Доступ к флажкам аналогичен доступу к данным текстового поля.
request.GET['ваше поле']
Используйте инструкции печати для проверки информации, доступной в GET.
запрос на печать.GET['ваше поле']
Если бы вы использовали объект формы, вы могли бы просто передать запрос конструктору и покончить с этим.Если вы делаете это вручную, вам придется немного поработать с сеансом.