首页 > 其他 > 详细

对订单结算理解

时间:2018-12-04 21:45:20      阅读:173      评论:0      收藏:0      [点我收藏+]

订单结算页面需要购物车勾选的商品

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)

 

对订单结算理解

原文:https://www.cnblogs.com/whigym/p/10066828.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!