@ErikHabr

Как создать корзину для гостевого пользователя на Django Rest Framework?

Ребят, объясните мне как создать корзину для гостя на Django Rest Framework и чтобы после регистрации или авторизации под его профилем была наполненная корзина? Я видел примеры использования сессий, но верно ли это так как примеры были связаны просто с Django, а не с DRF?


Вот пример вьюшки добавления товара в корзину, if user.is_authenticated user = user, а если не авторизован то кем тогда юзера делать?:
class AddToCartAPIView(APIView):
    authentication_classes = [JWTAuthentication]

    def post(self, request, domain, product_slug):

        institution = Institution.objects.get(domain=domain)
        product = get_object_or_404(Product, slug=product_slug)
        user = self.request.user
        if user.is_authenticated and user.is_customer:
            user = user
        else:
            # make it that guest user can create cart
            # user = ?
            return Response(
                {"detail": "Authorize to add product to an order."})

        cart, cart_created = Cart.objects.get_or_create(
            institution=institution, customer=user)

        cart_item, cart_item_created = CartItem.objects.get_or_create(
            customer=user,
            product=product,
            cart=cart
        )

        if cart_created is False:
            if cart.items.filter(product__slug=product.slug).exists():
                cart_item.quantity += 1
                cart_item.save()
                return Response({"detail": "Product quantity updated"})
            else:
                cart.items.add(cart_item)
                return Response({"detail": "New product added"})
        else:
            cart.items.add(cart_item)
            return Response({"detail": "Cart created and product added"})
  • Вопрос задан
  • 758 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deliro
Храни отдельной подписанной кукой, независимо от сессии и авторизация не будет на неё влиять. Но нужно понимать, что если пул продуктов залогиненого юзера и анонимуса отличаются, то это придётся обрабатывать ручками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы