Где инициализировать переменные сессии Django? - PullRequest
2 голосов
/ 23 декабря 2010

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

Я пытался сделать что-то вроде этого:

if 'cart' not in request.session:
    request.session['cart'] = {}

в пользовательскомпроцессор контекста, но процессор контекста, похоже, не изменяет данные сеанса.Где еще я мог бы поставить инициализацию, как это?Я не хочу помещать это в каждом месте, где я получаю значения из корзины.

Ответы [ 4 ]

5 голосов
/ 23 декабря 2010

Вы можете поместить его в кусок промежуточного программного обеспечения для пользовательских запросов , но, если честно, я думаю, что это было бы излишним.Вероятно, проще просто инициализировать корзину, когда она вам нужна в функции просмотра.Обратите внимание, что вы можете использовать request.session.get для автоматического получения значения по умолчанию, если значение еще не существует.Что-то вроде:

def my_view(request):
    cart = request.session.get('cart', {})
    # Do stuff with cart
    request.session['cart'] = cart
1 голос
/ 23 декабря 2010

Выполнение этого в промежуточном программном обеспечении (очевидно, под промежуточным программным обеспечением сеанса) гарантирует, что оно всегда установлено.

0 голосов
/ 23 декабря 2010

Ваш код должен работать как с context_processor, при условии, что ваши представления всегда используют RequestContext.

Я делаю то же самое для своей тележки, основанной на Satchmo нескольких лет назад.У меня есть context_processor, где я нахожу корзину из сеанса и передаю ее шаблону.Там также делается много других модификаций сессии ...

Итак ... ваш код должен работать как есть.Это выполняется вообще?Это установлено?

0 голосов
/ 23 декабря 2010

Зачем вам проверять, есть ли корзина в request.session. Почему бы не сделать что-то вроде этого:

cart_value = request.session.get('cart',{})

По сути, это будет возвращать значение в 'cart' в сеансе, а если в корзине нет значений, тогда возвращать пустой словарь.

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