订单结算

订单结算页面所需的数据从购物车中勾选而来。

1. 后端接口设计

请求方式 : GET /orders/settlement/

请求参数: 无

返回数据: JSON

参数 类型 是否必须 说明
freight decimal 运费
skus sku[] 结算的商品列表
id int 商品id
name str 商品名称
default_image_url str 商品默认图片
price decimal 商品单价
count int 商品数量
{
    "freight":"10.00",
    "skus":[
        {
            "id":10, "name":"华为 HUAWEI P10 Plus 6GB+128GB 钻雕金 移动联通电信4G手机 双卡双待", "default_image_url":"http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRchWAMc8rAARfIK95am88158618", "price":"3788.00", "count":1 }, { "id":16, "name":"华为 HUAWEI P10 Plus 6GB+128GB 曜石黑 移动联通电信4G手机 双卡双待", "default_image_url":"http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRdPeAXNDMAAYJrpessGQ9777651", "price":"3788.00", "count":1 } ] } 

2. 后端实现

在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中编写视图

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)

猜你喜欢

转载自www.cnblogs.com/hzlnice/p/9393143.html
今日推荐