comfy/artel/store/views.py

61 wiersze
2.0 KiB
Python
Czysty Zwykły widok Historia

from typing import Any, Dict
from django.views.generic import TemplateView
from rest_framework.viewsets import ViewSet
from rest_framework.decorators import action
from rest_framework.response import Response
from store.cart import SessionCart
from store.serializers import (
CartProductSerializer,
CartProductAddSerializer
)
class CartView(TemplateView):
"""
This view should simply render cart with initial data, it'll do that each refresh, for
making actions on cart (using jquery) we will use CartActionView, which will
be prepared to return JsonResponse.
"""
2023-05-25 01:16:01 +00:00
template_name = 'store/cart.html'
def get_context_data(self, **kwargs: Any) -> Dict[str, Any]:
context = super().get_context_data(**kwargs)
context["cart"] = SessionCart(self.request)
return context
class CartActionView(ViewSet):
@action(detail=False, methods=["get"], url_path="list-products")
def list_products(self, request):
# get cart items
cart = SessionCart(self.request)
items = cart.get_items()
serializer = CartProductSerializer(instance=items, many=True)
return Response(serializer.data)
@action(detail=False, methods=["post"])
def add_product(self, request):
cart = SessionCart(self.request)
serializer = CartProductAddSerializer(data=request.POST)
if not serializer.is_valid():
return Response(serializer.errors, status=400)
serializer.save(cart)
items = cart.get_items()
serializer = CartProductSerializer(instance=items, many=True)
return Response(serializer.data, status=201)
@action(detail=False, methods=["post"])
def remove_product(self, request):
cart = SessionCart(self.request)
product_id = request.POST.get("product_id")
cart.remove_item(product_id)
items = cart.get_items()
serializer = CartProductSerializer(instance=items, many=True)
return Response(serializer.data, status=201)