Django之爱鲜蜂项目开发 day06(二)

2订单模块

2.1表的关联

一个用户可以有多个订单 1:n
一个订单中可以有多个商品
一个商品可以在多个订单中
订单----商品 m:n
在这里插入图片描述

2.2建立模型

在这里插入图片描述
做一下数据迁移
在这里插入图片描述
然后可以查看一下,数据库中多了两张表

2.3点击结算按键时,生成订单

在views.py文件下写一下视图函数

@check_login
def add_order(request):

	data = {
		'status':1,
		'msg':'add order success'
	}

	order = Order()
	order.order_id = my_md5(str(uuid.uuid4()))
	#用uuid随机生成一窜数字,用md5生成订单号
	order.user_id = request.user.id

	order.save()

	#查询当前用户的购物车
	carts = Cart.objects.filter(user_id=request.user.id)
	
	# 如果没有这个购物车
	if not carts.exists():
		data['status'] = error_code.NO_THIS_CART
		data['msg'] = 'no this cart'
	# 如果有
	else:

		total_price = 0
		#把购车中的商品加入到商品订单表中
		for cart in carts:
			# 先判断一下商品是否被选中
			if cart.is_select:

				ordergoods = OrderGoods()
				ordergoods.goods_id = cart.goods_id
				ordergoods.order_id = order.id
				ordergoods.price = cart.goods.price
				ordergoods.num = cart.num

				ordergoods.save()

				#计算总价
				total_price += ordergoods.price * ordergoods.num

		order.price = total_price

		order.save()

	return JsonResponse(data)


然后在url.py文件下去添加path

path('add_order/',add_order,name='add_order'),#添加订单

在购物车cart.html页面,给结算按键添加一个id=“calculate_price”在这里插入图片描述
再添加一个点击事件,写一下js样式
这里使用Ajax请求从后端请求数据在这里插入图片描述
去浏览器添加到订单(不小心添加了两次)
在这里插入图片描述
查看一些订单表,数据添加成功
在这里插入图片描述
查看一下中间表
在这里插入图片描述

2.4 把订单发送到支付宝

进入myalipay.py文件下
在这里插入图片描述
进入views.py文件下的add_order视图函数,将myalipay.py文件下手机网站支付功能的代码复制过来进行修改,我们需要得到支付跳转的链接
在这里插入图片描述
也就是
在这里插入图片描述
去写一下js样式
在这里插入图片描述
这里用外部浏览器打开的,没有用虚拟机里的浏览器
由于沙箱调试不是那么稳定,有时可能会出现交易错误,还有可能是公钥的保存错误,存在空格,导致签名验证不通过

接下来,把支付成功的订单的状态码改一下,支付成功后跳到mine页面
在这里插入图片描述
这里有一些问题,一般情况下,订单支付后购物车中应该没有这些商品了,所以,提交订单的时候,清空购物车
在这里插入图片描述
当然最后这里可以整理一下

将添加到订单和生成支付宝订单分成两个视图函数

@check_login
def add_order(request):

    data = {
        'status':1,
        'msg':'add order success'
    }

    order = Order()
    order.order_id = my_md5(str(uuid.uuid4()))
    order.user_id = request.user.id

    order.save()

    #查询当前用户的购物车
    carts = Cart.objects.filter(user_id=request.user.id)

    if not carts.exists():
        data['status'] = error_code.NO_THIS_CART
        data['msg'] = 'no this cart'

    else:

        total_price = 0
        #把购车中的商品加入到商品订单表中
        for cart in carts:
            if cart.is_select:

                ordergoods = OrderGoods()
                ordergoods.goods_id = cart.goods_id
                ordergoods.order_id = order.id
                ordergoods.price = cart.goods.price
                ordergoods.num = cart.num

                ordergoods.save()

                #计算总价
                total_price += ordergoods.price * ordergoods.num

        #删除购物车中的商品
        carts.delete()


        order.price = total_price

        order.save()


    #支付连接发给前端
    data['re_url'] = make_alipay_bill(order)


    return JsonResponse(data)

#生成支付宝订单
def make_alipay_bill(order):
    #手机网站支付 alipay.trade.wap.pay
    order_string = alipay.api_alipay_trade_wap_pay(
        out_trade_no=order.order_id,
        total_amount=order.price,
        subject='一些水果',
        return_url="http://10.3.134.112:8000/axf/pay_result/",
        notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
    )

    alipay_url = 'https://openapi.alipaydev.com/gateway.do?'

    re_url = alipay_url + order_string

    return re_url
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值