订单结算页面需要购物车勾选的商品
1. 后端接口设计
请求方式 : GET /orders/settlement/
请求参数: 无
返回数据: JSON
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
freight | decimal | 是 | 运费 |
skus | sku[] | 是 | 结算的商品列表 |
id | int | 是 | 商品id |
name | str | 是 | 商品名称 |
default_image_url | str | 是 | 商品默认图片 |
price | decimal | 是 | 商品单价 |
count | int | 是 | 商品数量 |
在orders/serialziers.py中创建序列化器 用于返回商品信息
class CartSKUSerializer(serializers.ModelSerializer): """ 购物车商品数据序列化器 """ count = serializers.IntegerField(label='数量') class Meta: model = SKU fields = ('id', 'name', 'default_image_url', 'price', 'count') class OrderSettlementSerializer(serializers.Serializer): """ 订单结算数据序列化器 """ freight = serializers.DecimalField(label='运费', max_digits=10, decimal_places=2) skus = CartSKUSerializer(many=True)
在orders/views.py中编写视图 执行流程
设置登录用会权限
定义get方法
获取用户
查询用户所有勾选商品的sku_id
从SKU数据表中查出对象
为每个对象添加数量属性
计算运费
返回
class OrderSettlementView(APIView): """ 订单结算 """ permission_classes = [IsAuthenticated] def get(self, request): """ 获取 """ user = request.user # 从购物车中获取用户勾选要结算的商品信息 redis_conn = get_redis_connection('cart') redis_cart = redis_conn.hgetall('cart_%s' % user.id) cart_selected = redis_conn.smembers('cart_selected_%s' % user.id) cart = {} for sku_id in cart_selected: cart[int(sku_id)] = int(redis_cart[sku_id]) # 查询商品信息 skus = SKU.objects.filter(id__in=cart.keys()) for sku in skus: sku.count = cart[sku.id] # 运费 freight = Decimal('10.00') serializer = OrderSettlementSerializer({'freight': freight, 'skus': skus}) return Response(serializer.data)