订单结算
Posted hzlnice
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了订单结算相关的知识,希望对你有一定的参考价值。
订单结算页面所需的数据从购物车中勾选而来。
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)
以上是关于订单结算的主要内容,如果未能解决你的问题,请参考以下文章
Magento2 - 使用Paypal结算协议创建自定义订单(“强制参数缺少referenceId错误”)