美多商城项目购物车模块实现

本文介绍了如何在Django框架下实现美多商城的购物车功能,包括添加商品到购物车、查询购物车数据、修改购物车商品数量、删除商品、购物车全选以及合并登录购物车的操作。同时,针对登录过程中获取user对象和处理QQ登录的序列化器进行了详细说明。

购物车模块实现

  • 添加到购物车: 对前端发送的sku_id, count, selected进行相应的存储

    # 先定义序列化器, 用途是对sku_id,count进行验证
    class CartSerializer(serializers.Serializer):
        sku_id = serializers.IntegerField(min_value=1)
        count = serializers.IntegerField(min_value=1)
        selected = serializers.BooleanField(default=True)
        def validate(self,attrs):
            try:
                sku = SKU.objects.get(id=atttrs['sku_id'])
    		except:
                raise serializers.ValidationError('商品不存在')
    		if count > sku.stock:
                raise serializers.ValidationError('库存不足')
    		return attrs
        
    # 定义视图, 实现业务逻辑
    class CartView(APIView):
        # 重写验证方法, 不在进入视图前就检查JWT
        def perform_authentication(self, request):
            pass
        # 在商品详情页添加购物车
        def post(self,request):
    		serializer=CartSerializer(data=request.data)
    		serializer.is_valid(raise_exception=True)
            # 获取数据
    		sku_id=request.data.get('sku_id')
    		count=request.data.get('count')
    		selected=request.data.get('selected')
    		# 判断用户登录
            try:
                user=request.user
    		except:
                user=None
    		if user:
                # 在redis中存储,redis存储的数据不需要加密
                conn = get_redis_connection('cart')
                conn.hincrby('cart_%s'%user.id,sku_id,count)
                if selected:
                    conn.sadd('cart_selected_%s'%user.id,sku_id)
    		   return Response(serializer.data)
            else:
                cart=request.COOKIES.get('cart')
                if cart:
                    cart=pickle.loads(base64.b64decode(cart))
    		   else:
                	cart={
         
         }
    		   sku = cart.get(sku_id)
                if sku:
                    count+=int(sku.get('count'))
                    cart[sku_id]={
         
         
                        'count':count,
                        'selected':selected
                    }
    		   cart_cookie=base64.b64encode(pickle.dumps(cart))
                response
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值