Хранение выбора посетителя в Джанго - PullRequest
0 голосов
/ 09 июля 2011

У меня есть веб-сайт Django, который в основном просто отображает кучу элементов из базы данных с поиском, фильтрацией и т. Д. Сайт является общедоступным, без входа в систему или чего-либо еще.То, что я хочу сделать, - это когда пользователь впервые посещает сайт, запрашивает у него выбор фильтра, а затем сохраняет этот выбор фильтра (на их компьютере будет предпочтительнее, будет ли здесь работать cookie-файл браузера?), Чтобы каждый раз, когда они посещают его.веб-сайт, он отображается с этим фильтром.

Итак, у меня есть два конкретных вопроса:

1) Как лучше всего хранить их выбор?

2) Что такоелучший способ собрать свой выбор?То, как я представляю себе такое поведение, это первый раз, когда они посещают сайт, им предлагают своего рода «всплывающее окно», которое в основном запрашивает их выбор фильтра, и переходит на главную страницу сайта со своим фильтром.выбор включен.У меня проблема в том, что выбор фильтра, который они выбирают, изменяет контент, который будет отображаться на сайте.Есть ли способ избежать перезагрузки всей страницы, если у меня есть выбор фильтра?

Вот хороший пример чего-то вроде всплывающего окна, которое я пытаюсь создать: http://www.wizards.com/wpn/events/rules.aspx

Спасибо, -Алексей

1 Ответ

1 голос
/ 09 июля 2011

Предоставление пользователю cookie, безусловно, будет работать. В веб-разработке этот метод известен как создание «сеанса» для пользователя, так что каждый раз, когда он запрашивает страницу с вашего сайта, запрос может быть идентифицирован как часть этого конкретного сеанса и соответственно обработан.

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

  1. Включить промежуточное программное обеспечение сеансов Django (это уже сделано в проекте Django по умолчанию). Убедитесь, что django.contrib.sessions.middleware.SessionMiddleware находится в вашей переменной MIDDLEWARE_CLASSES в файле настроек.
  2. Выберите сессионный бэкэнд. Для начала сеансы базы данных будут работать достаточно хорошо (если производительность станет проблемой позже, рассмотрим кэшированные сеансы с Memcached, предоставляющим хранилище).
  3. Установите соответствующий SESSION_COOKIE_AGE, который соответствует вашим требованиям. Вы можете установить это число очень высоким, если хотите, чтобы выбор пользователей продолжался в течение длительного времени.

Как только вы это сделаете, переменная request, передаваемая в ваши представления, будет иметь атрибут session. session - это объект, который вы можете использовать как словарь для хранения информации. Волшебство в том, что эта информация будет уникальной для каждого пользователя, который делает запросы на ваш сайт.

Этот частичный код демонстрирует, как вернуть контент на основе ранее выбранного пользователем выбора, сохраненного в их сеансе:

def get_front_page_contents(request):
    filter = request.session.get('filter_choice', False)
    if filter:
        # do the filtering 
        render_to_response(template_name,
            {'filtered_content': content},
            RequestContext(request))
    else:
        # the user has not made a choice so
        # return a default result set or redirect 
        # to form that allows them to make a choice

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

  1. При первоначальном запросе на домашнюю страницу, проверьте, есть ли у request.session выбор, сохраненный для этого пользователя.
    • Если это так, создайте страницу с фильтрованным содержимым (и все готово).
    • Если нет, перенаправьте на форму, где они могут сделать выбор.
  2. При отправке формы сохраните выбор в request.session для этого пользователя. Верните желаемый контент.

После этого процесса, когда один и тот же пользователь вернется к шагу один позднее, будет отображаться его желаемое содержимое.

Избегание перезагрузки страницы - отдельная проблема, но это легко сделать с помощью методов javascript и AJAX. Вы, вероятно, захотите разместить минимальную страницу, которая включает в себя javascript для выполнения запросов на контент. Эти AJAX-запросы могут быть точно таким же образом проверены на наличие данных сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...