zoukankan      html  css  js  c++  java
  • 对订单结算理解

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

    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)
  • 相关阅读:
    机械设计手册
    如何在PADS的封装中做非金属化孔
    【Protle99SE】PCB中各层的含义【小汇】
    Stm32时钟分析
    头文件为什么要加#ifndef #define #endif
    android adb常用指令
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    SQL 2008下载地址以及全新安装详细过程
    【原创】pads2007 Layout 电气连接性检查过孔显示错误
    十款最具发展前景机器人
  • 原文地址:https://www.cnblogs.com/whigym/p/10066828.html
Copyright © 2011-2022 走看看