Я вижу, что на сайтах электронной коммерции посетители могут добавлять товары в корзину, но во время проверки он может войти в систему и продолжить покупки без потери переменных сеанса. Например, я добавляю два элемента в корзину, а затем я вхожу в систему и добавляю третий элемент. Я предполагаю, что это можно сделать с помощью сеанса, так что я сделал следующее представление для добавления в корзину:Как подключить переменные сеанса к зарегистрированному пользователю в Django?
def AddToBag(request, upc):
if request.method == "GET":
item = Item.objects.get(upc=upc)
amount = 1
price = Item.objects.filter(id=item.id).values('mrp')[0]['mrp']
net = amount * price
session_id = request.session.session_key
if request.user.is_authenticated():
b, created = Bag.objects.get_or_create(user=request.user, upc=upc, defaults={'item': item, 'qty': amount, 'price': price, 'net': net, 'session_id': session_id})
if created:
pass
else:
amount = Bag.objects.filter(user=request.user, upc=upc).values('qty')[0]['qty'] + 1
net = amount * price
Bag.objects.filter(upc=upc).update(qty=amount, net=net)
total_items = Bag.objects.filter(user=request.user).count()
total_price = Bag.objects.filter(user=request.user).aggregate(Sum('net'))['net__sum']
else:
b, created = Bag.objects.get_or_create(user=User.objects.get(username='AnonymousUser'), upc=upc, defaults={'item': item, 'qty': amount, 'price': price, 'net': net, 'session_id': session_id})
if created:
pass
else:
amount = Bag.objects.filter(user=User.objects.get(username='AnonymousUser'), upc=upc).values('qty')[0]['qty'] + 1
net = amount * price
Bag.objects.filter(upc=upc).update(qty=amount, net=net)
total_items = Bag.objects.filter(user=User.objects.get(username='AnonymousUser')).count()
total_price = Bag.objects.filter(user=User.objects.get(username='AnonymousUser')).aggregate(Sum('net'))['net__sum']
return render(request, "alpha/add-to-bag.html", {'total_items': total_items, 'total_price': total_price})
То, что я заметил, что если я просматриваю, как AnonymousUser
добавления элементов в корзину не сохранить session_key
, поэтому, когда я войдите в систему, все предметы исчезли, и я снова должен начинать добавлять элементы. Если я снова выйду из системы, элементы, добавленные до входа в систему, все еще существуют.
Что я хочу, так это то, что пользователи могут добавлять элементы в корзину, а анонимные, если они решат войти в систему, эти элементы будут переданы в корзину после входа в систему. Если они снова выйдут из системы и станут анонимными посетителями, они могут потерять когда они были перенесены в корзину пользователя. Как я могу это сделать?
Обновление: Я смог создать идентификатор сеанса перед входом пользователя и сохранить его в поле session_id
. Однако идентификаторы сеансов различаются до и после входа в систему, как приложение может понять, является ли он одним и тем же пользователем?