Не удается получить cookie в Django
довольно новичок в Django, и мне трудно решить ситуацию в проекте, над которым я работаю.
Я устанавливаю свои cookies через JS как JSON и пытаюсь запросить их в бэкенде.
Мой код для JS таков:
function getCookie(name) {
// Split cookie string and get all individual name=value pairs in an array
var cookieArr = document.cookie.split(";");
// Loop through the array elements
for(var i = 0; i < cookieArr.length; i++) {
var cookiePair = cookieArr[i].split("=");
/* Removing whitespace at the beginning of the cookie name and compare it with the given string */
if(name == cookiePair[0].trim()) {
// Decode the cookie value and return
return decodeURIComponent(cookiePair[1]);
}
}
// Return null if not found
return null;
}
var cart = JSON.parse(getCookie('cart'))
if (cart == undefined){
cart = {}
console.log('Cart Created!', cart)
document.cookie ='cart=' + JSON.stringify(cart) + ";domain=;path=/"
}
console.log('Cart:', cart)
После этого я пытаюсь получить cookie корзины в бэкенде. Также товары, добавленные в корзину, отображаются в консоли.
Мой код бэкенда таков:
def cart(request):
print(request.COOKIES)
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(
customer=customer,
complete=False,
)
items = order.orderitem_set.all()
cart_items = order.get_cart_items
else:
try:
bag = json.loads(request.COOKIES['cart'])
print('CART ITEMS:', bag)
except KeyError:
bag = {}
print('CART ITEMS:', bag)
items = []
order = {
'get_cart_total': 0,
'get_cart_items': 0,
}
cart_items = order['get_cart_items']
for i in bag:
cart_items += bag[i]['quantity']
context = {
'items': items,
'order': order,
'cart_items': cart_items,
}
return render(request, 'cart/cart.html', context)
Изображение с терминала с данными, которые он получает из cookie:
Я думаю, что вы неправильно устанавливаете cookies (например, отсутствует время истечения срока действия), пожалуйста, проверьте это
Также, для упрощения ситуации вместо использования try/except можно просто использовать bag = json.loads(request.COOKIES.get('cart',{})