• 对订单结算理解


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

    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)
  • 相关阅读:
    javascript HTML DOM
    js 同步异步阻塞非阻塞非原创
    端口规范
    SASS用法指南
    整合js,css文件
    HTTP状态码大全
    控制移动端页面的缩放(meta)
    移动端最小以及最大的宽度
    H5手机端关注的问题
    javascript高级编程3第三章:基本概念 本章内容 语法 数据类型 流控制语句 函数
  • 原文地址:https://www.cnblogs.com/whigym/p/10066828.html
Copyright © 2020-2023  润新知