结算订单

1. 结算订单逻辑分析
结算订单是从Redis购物车中查询出被勾选的商品信息进行结算并展示。
2. 结算订单接口设计和定义
1.请求方式
| 选项 | 方案 |
|---|---|
| 请求方法 | GET |
| 请求地址 | /orders/settlement/ |
3. 结算订单后端逻辑实现
class OrderSettlementView(LoginRequiredMixin, View):
"""结算订单"""
def get(self, request):
"""提供订单结算页面"""
# 获取登录用户
user = request.user
# 查询当前用户的所有地址信息
addresses = Address.objects.filter(user=request.user,
is_deleted=False)
# 从Redis购物车中查询出被勾选的商品信息
redis_conn = get_redis_connection('carts')
redis_cart = redis_conn.hgetall('carts_%s' % user.id)
cart_selected = redis_conn.smembers('selected_%s' % user.id)
cart = {}
for sku_id in cart_selected:
cart[int(sku_id)] = int(redis_cart[sku_id])
# 查询商品信息
sku_list = []
# 查询商品信息
skus = SKU.objects.filter(id__in=cart.keys())
for sku in skus:
sku_list.append({
'id':sku.id,
'name':sku.name,
'default_image_url':sku.default_image.url,
'count': cart[sku.id],
'price':sku.price
})
# 补充运费
freight = Decimal('10.00')
addresses_list = []
for address in addresses:
addresses_list.append({
'id':address.id,
'province':address.province.name,
'city':address.city.name,
'district':address.district.name,
'place':address.place,
'receiver':address.receiver,
'mobile':address.mobile
})
# 渲染界面
context = {
'addresses': addresses_list,
'skus': sku_list,
'freight': freight,
}
return http.JsonResponse({'code':0,
'errmsg':'ok',
'context':context})