订单页面
在前面我们已经构建了,购物车的页面,接下来到了结算页面
1.首先,在购物车页面点击去结算按钮时,我们需要做如下动作
.前端发送生成订单的请求,点击标签内触发事件 create_order
template:去结算script,methods中:
create_order(){//生成订单
this.$axios.post("http://127.0.0.1:8000/orders/",{},{
headers: {//附带已经登录用户的jwt token 提供给后端,一定不能疏忽这个空格'Authorization': 'JWT' +this.token
},
responseType:"json",
}).then(response=>{//在session中保存订单ID,便于在结算页面发送请求时带上order_id,查询订单详情
sessionStorage.order_id=response.data.order_id;//跳转到结算页面
this.$router.push("/order")
}).catch(error=>{//生成订单失败
alert("生成订单失败")
})
后端需要对该请求作出处理,将订单保存到mysql中,并返回对应的订单的ID值(不是订单号),但是在做订单保存之前,我们必须先创建订单的数据模型,其中模型如下所示
order.models:
订单的模型:
#Create your models here.
from django.db importmodels#Create your models here.
from luffy.apps.user.models importUserfrom luffy.apps.courses.models importCourseclassOrder(models.Model):"""订单记录"""status_choices=(
(0,'未支付'),
(1, '已支付'),
(2, '已取消'),
)
total_price= models.DecimalField(max_digits=10, decimal_places=2, verbose_name="订单总价", default=0)
order_number= models.CharField(max_length=32,verbose_name="订单号")
order_status= models.SmallIntegerField(choices=status_choices, default=0, verbose_name="订单状态")
order_desc= models.CharField(max_length=120,verbose_name="订单描述")
created_time= models.DateTimeField(verbose_name="订单生成时间", auto_now_add=True)
pay_time= models.DateTimeField(verbose_name="订单支付时间", auto_now_add=True)
user= models.ForeignKey(User, related_name='user_orders', on_delete=models.DO_NOTHING,verbose_name="用户ID")classMeta:
db_table="ly_order"verbose_name= "订单记录"verbose_name_plural= "订单记录"
classOrderDetail(models.Model):"""订单详情"""order= models.ForeignKey("Order", related_name='order_course', on_delete=models.CASCADE, verbose_name="订单ID")
course= models.ForeignKey(Course, related_name='course_order', on_delete=models.CASCADE, verbose_name="课程ID")
user= models.ForeignKey(User, null=True, related_name="course", on_delete=models.DO_NOTHING, verbose_name="用户ID")
unit_price= models.DecimalField(max_digits=8, decimal_places=2, null=True, verbose_name="课程价格")classMeta:
db_table="ly_order_detail"verbose_name= "订单详情"verbose_name_plural= "订单详情"
而后端的处理代码如下所示
classOrderAPIView(APIView):defpost(self,request):#获取用户ID
try:
user_id=request.user.idexcept:retu