Django гостевая корзина пользователя функциональность? Безопасно ли это?

Создаю проект сайта электронной коммерции, чтобы попытаться изучить Django и больше узнать о Javascript, поэтому последнюю неделю я изучаю учебник. В учебнике есть функция гостевой пользовательской корзины. Она работает, сохраняя данные о пользователе и товаре в cookies. Однако у меня возникают проблемы с добавлением нескольких одинаковых товаров. Если я вхожу в систему как пользователь, сайт работает нормально. Функция удаления отлично работает для удаления товара из корзины в качестве гостя. В консоли JavaScript элементы в корзине удаляются, но куки сохраняют ту же информацию до перезагрузки сайта. Не знаю причину этой проблемы. Я бы очень хотел, чтобы эта функция работала. Журнал консоли JavaScript cart.js

var updateBtns = document.getElementsByClassName('update-cart')

for(var i = 0; i < updateBtns.length; i++) {
    updateBtns[i].addEventListener('click', function() {
        //sets variable to add to the dictionary.
        var productId = this.dataset.product
        var action = this.dataset.action
        console.log('productId:', productId, 'action:', action)

        //checks to see if the user is logged in.
        console.log('USER:', user)
        if (user === 'AnonymousUser') {
            addCookieItem(productId, action)
        } else {
            updateUserOrder(productId, action)
        }
    })
}

function addCookieItem(productId, action) {
    console.log('Not logged in.')

    //add quantity to the cart by 1
    if (action == 'add') {
        if(cart[productId] == undefined) {
            cart[productId] = {'quantity':1}
        } else {
            cart[productId]['quantity'] += 1
        }
    }
    //removes quantity to the cart by 1
    if (action == 'remove') {
        cart[productId]['quantity'] -= 1

        if(cart[productId]['quantity'] <= 0){
            console.log('Remove Item')
            delete cart[productId]
        }
    }
    console.log('Cart:', cart)
    //
    document.cookie = 'cart=' + JSON.stringify(cart) + ";domain=;path=/"
    location.reload()
}

function updateUserOrder(productId, action) {
    console.log('User is logged in, sending data...')

    var url = '/update_item/'

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type':'application/json',
            'X-CSRFToken':csrftoken,
        },
        body: JSON.stringify({
            'productId':productId,
            'action':action,
        })
    })

    .then((response) =>{
        return response.json()
    })

    .then((data) =>{
        console.log('data:', data)
        location.reload()
    })
}

main.html

var user = '{{request.user}}';

      function getToken(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie !== '') {
          var cookies = document.cookie.split(';');
          for (var i=0; i<cookies.length; i++) {
            var cookie = cookies[i].trim();
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
              cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
              break;
            }
          }
        }
        return cookieValue;
      }
      var csrftoken = getToken('csrftoken');

      function getCookie(name) {
        var cookieArr = document.cookie.split(";")

        for(var i=0;i<cookieArr.length; i++) {
          var cookiePair = cookieArr[i].split("=");

          if(name == cookiePair[0].trim()) {
            return decodeURIComponent(cookiePair[1]);
          } 
        }
        return null;
      }
      var cart = JSON.parse(getCookie('cart'))

      if (cart == undefined) {
        cart = {}
        console.log('Cart was created', cart)
        document.cookie = 'cart=' + JSON.stringify(cart) + ";domain=;path=/"
      }

      console.log("Cart:", cart);

utils.py

import json
from .models import *

def cookieCart(request):
    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()
        cartItems = order.get_cart_items
    else:
        try:
            cart = json.loads(request.COOKIES['cart'])
        except:
            cart = {}
        print('Cart:', cart)
        items = []
        order = {
            'get_cart_total':0,
            'get_cart_items':0,
            'shipping':False,
        }
        cartItems = order['get_cart_items']

        for i in cart:
            try:
                cartItems += cart[i]['quantity']

                product = Product.objects.get(id=i)
                total = (product.price * cart[i]['quantity'])

                order['get_cart_total'] += total
                order['get_cart_items'] += cart[i]['quantity']

                item = {
                    'product': {
                    'id':product.id,
                    'name':product.name,
                    'price':product.price,
                    'imageURL':product.imageURL
                    },
                    'quantity':cart[i]['quantity'],
                    'get_total':total,
                }
                items.append(item)

                if product.digital == False:
                    order['shipping'] = True
            except:
                pass
    return {'cartItems':cartItems, 'order':order, 'items':items}

def cartData(request):
    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()
        cartItems = order.get_cart_items
    else:
        cookieData = cookieCart(request)
        cartItems = cookieData['cartItems']
        order = cookieData['order']
        items = cookieData['items']
    return {'cartItems':cartItems, 'order':order, 'items':items}

def guestOrder(request, data):
    print('User is not logged in..')

    print('COOKIES:', request.COOKIES)
    name = data['form']['name']
    email = data['form']['email']

    cookieData = cookieCart(request)
    items = cookieData['items']

    customer, created = Customer.objects.get_or_create(
        email=email,
    )
    customer.name = name
    customer.save()

    order = Order.objects.create(
        customer=customer,
        complete=False,
        
    )
    for item in items:
        product = Product.objects.get(id=item['product']['id'])

        orderItem = OrderItem.objects.create(
            product=product,
            order=order,
            quantity=item['quantity'],
        )
    return customer, order

views def cart(request):

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()
        cartItems = order.get_cart_items
    else:
        cookieData = cookieCart(request)
        cartItems = cookieData['cartItems']
        order = cookieData['order']
        items = cookieData['items']

    context = {'items':items, 'order':order, 'cartItems':cartItems}
    return render(request, 'store/cart.html', context)

Помощь будет очень признательна! Это мой первый пост в stack overflow, так что если вы читаете это и знаете, что я делаю неправильно, пожалуйста, дайте мне знать!

Вернуться на верх