Как проверить сессию, не создавая новую?

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

я делаю это в процессоре контекста шаблона

def shared_values(request):

    show_help = request.session.get('show_help', True)
    return {
        'show_help': show_help,
    }

Это работает отлично, но у меня есть проблема - каждый раз, когда я проверяю сеанс, django создает новую запись в таблице сеансов, если запись не существовала ранее.

Как я могу проверить сессию, не создавая новую?

Редактировать 1:

Затем я отключаю проверку сеансового ключа, я вижу, что django не создает никаких сеансовых записей для запросов.

  1. Я вхожу в систему как администратор в 1-м браузере (хром) и удаляю все сеансы (кроме одного для себя)
  2. Отредактируйте процессор контекста, чтобы я не обращался к сеансам в своем проекте:

    show_help = Истина

  3. Откройте страницу в другом браузере (firefox)

  4. Переключитесь на 1-й браузер и проверьте, появился ли новый объект сеанса, но ничего не изменилось - существует только один объект сеанса.

Редактировать 2:

я использую джанго 1.4.1


person Sergey Lyapustin    schedule 22.10.2012    source источник


Ответы (1)


Документы:

Когда SessionMiddleware активирован, каждый объект HttpRequest — первый аргумент любой функции представления Django — будет иметь атрибут session, который является объектом, подобным словарю.

Таким образом, каждый раз, когда вы делаете запрос, сессия будет создана, если она еще не существует. При применении context_processor сессия уже существует. Вы не должны беспокоиться об этом.

person Sergey Goliney    schedule 22.10.2012
comment
На самом деле это не так. Поскольку тогда я отключаю проверку сеансового ключа, я вижу, что django не создает никаких сеансовых записей. - person Sergey Lyapustin; 22.10.2012
comment
Я провел эксперимент. Я удалил все записи сеанса в базе данных и установил точку останова в первой строке первого context_processor. Я запускаю debug , процесс остановился в точке останова, я посмотрел базу данных и ... вуаля - есть новая запись сеанса. Возможно, вам следует сделать более подробное описание проблемы, с которой вы столкнулись. - person Sergey Goliney; 23.10.2012
comment
Какая у вас версия джанго? - person Sergey Goliney; 23.10.2012
comment
Django 1.4.1, на 1.4.2 у меня тот же результат. - person Sergey Lyapustin; 23.10.2012