Чтобы создать корзину для не залогиненных пользователей в Django, можно использовать сессии. Сессии в Django позволяют хранить информацию о пользователях на сервере, идентифицируемого с помощью уникального сессионного ключа, который затем отправляется клиенту в виде cookie. В случае не залогиненного пользователя, этот уникальный ключ будет использоваться для связывания данных корзины с конкретным пользователем.
Вот несколько шагов, которые нужно выполнить:
1. Включите поддержку сессий в настройках вашего проекта (файл settings.py):
# settings.py INSTALLED_APPS = [ ... 'django.contrib.sessions', ... ] MIDDLEWARE = [ ... 'django.contrib.sessions.middleware.SessionMiddleware', ... ]
2. Создайте представление для добавления товаров в корзину:
# views.py from django.shortcuts import render, redirect def add_to_cart(request, product_id): product = Product.objects.get(id=product_id) # Создание или получение существующей сессии if 'cart' not in request.session: request.session['cart'] = {} cart = request.session['cart'] # Добавление товара в корзину if product_id not in cart: cart[product_id] = { 'quantity': 1, 'price': str(product.price), } else: cart[product_id]['quantity'] += 1 request.session['cart'] = cart return redirect('cart')
3. Создайте представление для отображения корзины:
# views.py def cart(request): cart = request.session.get('cart', {}) total_price = 0 for product_id, cart_item in cart.items(): product = Product.objects.get(id=product_id) cart_item['product'] = product cart_item['total_price'] = cart_item['quantity'] * Decimal(cart_item['price']) total_price += cart_item['total_price'] return render(request, 'cart.html', {'cart': cart, 'total_price': total_price})
4. Создайте шаблон для отображения корзины:
<!-- cart.html --> {% for product_id, cart_item in cart.items %} <div> <h3>{{ cart_item.product.name }}</h3> <p>Quantity: {{ cart_item.quantity }}</p> <p>Price: {{ cart_item.price }}</p> <p>Total Price: {{ cart_item.total_price }}</p> </div> {% endfor %} <p>Total price: {{ total_price }}</p>
5. Добавьте URL-маршруты:
# urls.py from django.urls import path from . import views urlpatterns = [ ... path('add_to_cart/<int:product_id>/', views.add_to_cart, name='add_to_cart'), path('cart/', views.cart, name='cart'), ... ]
Теперь, когда вы добавите товар в корзину, его информация будет храниться в сессии, и вы сможете отображать содержимое корзины на странице с помощью представления cart().