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)
  • 相关阅读:
    c# 使用ajaxfileupload上传文件,通过一般处理程序(Handler)接收文件 ashx 图片 Excel文件都可以
    C#+aspx+ajaxfileupload 实现文件上传
    Java中的int与String互相转换方式
    简述 readyonly 与 disabled 的区别
    was应用服务器搭建
    MVC中贫血模型与充血模型
    npm安装教程 Vue环境搭建
    使用vs Code从0开始搭建一个vue项目(手把手教会你,包会)
    使用VS code 打开Vue项目
    Task , Thread 学习
  • 原文地址:https://www.cnblogs.com/whigym/p/10066828.html
Copyright © 2011-2022 走看看