查询购物车数据

Posted hzlnice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询购物车数据相关的知识,希望对你有一定的参考价值。

1. 后端接口设计

请求方式 : GET /cart/

请求参数: 无

返回数据: JSON 或 表单

[
    {
        "id": 9,
        "count": 3,
        "name": "华为 HUAWEI P10 Plus 6GB+64GB 钻雕金 移动联通电信4G手机 双卡双待",
        "default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRcUeAHp9pAARfIK95am88523545",
        "price": "3388.00",
        "selected": true
    },
    {
        "id": 12,
        "count": 1,
        "name": "华为 HUAWEI P10 Plus 6GB+64GB 钻雕蓝 移动联通电信4G手机 双卡双待",
        "default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRdICAO_CRAAcPaeOqMpA2024091",
        "price": "3388.00",
        "selected": true
    }
]
参数类型是否必须说明
id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选
name str 商品名称
default_image_url str 商品默认图片
price decimal 商品单价

2. 后端实现

在carts/serializers.py中创建序列化器

class CartSKUSerializer(serializers.ModelSerializer):
    """
    购物车商品数据序列化器
    """
    count = serializers.IntegerField(label=‘数量‘)
    selected = serializers.BooleanField(label=‘是否勾选‘)

    class Meta:
        model = SKU
        fields = (‘id‘, ‘count‘, ‘name‘, ‘default_image_url‘, ‘price‘, ‘selected‘)

在carts/views.py 中修改视图,增加get方法

class CartView(APIView):
    ...

    def get(self, request):
        """
        获取购物车
        """
        try:
            user = request.user
        except Exception:
            user = None

        if user is not None and user.is_authenticated:
            # 用户已登录,从redis中读取
            redis_conn = get_redis_connection(‘cart‘)
            redis_cart = redis_conn.hgetall(‘cart_%s‘ % user.id)
            redis_cart_selected = redis_conn.smembers(‘cart_selected_%s‘ % user.id)
            cart = {}
            for sku_id, count in redis_cart.items():
                cart[int(sku_id)] = {
                    ‘count‘: int(count),
                    ‘selected‘: sku_id in redis_cart_selected
                }
        else:
            # 用户未登录,从cookie中读取
            cart = request.COOKIES.get(‘cart‘)
            if cart is not None:
                cart = pickle.loads(base64.b64decode(cart.encode()))
            else:
                cart = {}

        # 遍历处理购物车数据
        skus = SKU.objects.filter(id__in=cart.keys())
        for sku in skus:
            sku.count = cart[sku.id][‘count‘]
            sku.selected = cart[sku.id][‘selected‘]

        serializer = CartSKUSerializer(skus, many=True)
        return Response(serializer.data)

以上是关于查询购物车数据的主要内容,如果未能解决你的问题,请参考以下文章

片段视图返回后执行的 Firebase 查询

SQL server 建立的触发器子查询返回值不唯一,需要用多个返回值如何操作

java后台对查询到的商品列表按店铺分组并返回json数据_新手学习

tp中数据库查询的问题

查询购物车数据

你如何在 python 中处理 graphql 查询和片段?