Форум сайта python.su
Доброго времени суток. С джанго работаю пока только месяц. Испытываю абсолютный восторг, откровенно говоря. Но тут довелось с сессиями столкнуться и их поведение оказалось достаточно неожиданным для меня. Есть попытка сделать интернет магазин, доступен он на текущий момент по адресу 90.157.115.19:86, хостится на моей домашней машинке, Ubuntu 9.10, Apache/2.2.12, mod_python 3.3.1, python 2.6, django 1.1. При добавлении товара в корзину информация о товаре заносится в сессию. При оформлении заказа или очистке корзины эта информация должна удаляться. На деле сталкиваюсь с тем, что после очистки корзины, понажимав различные ссылки, через некоторое время в корзине опять появляется один товар. Куки не изменяется. Откуда там появляется товар мне не ясно. В моих глазах выглядит как абсолютное волшебство. Далее функции записи и очистки корзины:
def set_basket(request,new_basket=[]):
if request.session.has_key('order_items'):
del request.session[u'order_items']
request.session[u'order_items'] = new_basket
request.session.save()
return request.session[u'order_items']
def get_basket(request):
if (not request.session.has_key(u'order_items')) or (not len(request.session[u'order_items'])):
set_basket(request)
return request.session[u'order_items']
def clear_basket(request):
if request.session.has_key('order_items'):
del request.session[u'order_items']
return HttpResponseRedirect('/orders/list/')
def add_to_basket(request,Item):
basket = get_basket(request)
if isinstance(Item, OrderItem):
for (i,oItem) in enumerate(basket):
if oItem.good.id != Item.good.id: continue
if oItem.size.id != Item.size.id: continue
if oItem.color.id != Item.color.id: continue
basket.quantity+=int(Item.quantity)
break
else:
basket+=[Item]
set_basket(request,basket)
return basket
Офлайн
Джанговские сессии в куке держат только хеш сессии, и больше ничего (если вручную туда ничего не пихать).
Может ошибка в названии ключа? Почему в одно месте - это просто стринг, а вдругом - юникодный?
А вообще описание проблемы смутное. Попробуйте проследить все вызовы для воспроизведения проблемы.
Офлайн
RedLobster
Вы уже постите эту тему во второй форум, и всё равно не можете выделить код по человечески. Вам нужна помощь в освоении bbcode?
Офлайн