6 - 订单管理
6.1.获取订单表表列表数据
接口分析
请求方式: GET
/meiduo_admin/orders/?keyword=<搜索内容>&page=<页码>&pagesize=<页容量>
请求参数: 通过请求头传递jwt token数据。
返回数据: JSON
{
"counts": 39,
"list": [
{
"order_id": "20181126102807000000004",
"create_time": "2018-11-26T18:28:07.470959+08:00"
},
{
"order_id": "20181126103035000000004",
"create_time": "2018-11-26T18:30:35.854982+08:00"
},
......
],
"page": 1,
"pages": 8,
"pagesize": 5
}
返回值 | 类型 | 是否必须 | 说明 |
---|---|---|---|
count | int | 是 | 订单数据总量 |
lists | 数组 | 是 | 订单表信息 |
page | int | 是 | 页码 |
pages | int | 是 | 总页数 |
pagesize | int | 是 | 页容量 |
后端实现
class OrdersView(ModelViewSet):
serializer_class = OrderSeriazlier
queryset = OrderInfo.objects.all()
pagination_class = PageNum
序列化器的定义
class OrderSeriazlier(serializers.ModelSerializer):
class Meta:
model = OrderInfo
fields = '__all__'
6.2.获取订单表详情数据数据
当点击订单详情时,我们需要获取订单详情数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0rKYTaiJ-1611985864632)(file:///E:/Desktop/%E8%B5%84%E6%96%99/%E9%98%B6%E6%AE%B54-web%E5%BC%80%E5%8F%91/%E8%AF%BE%E4%BB%B6/9-%E7%BE%8E%E5%A4%9A%E5%95%86%E5%9F%8E%E5%90%8E%E5%8F%B0/src/detailorders.png)]
接口分析
请求方式: GET
/meiduo_admin/orders/(?P<pk>\d+)/
请求参数: 通过请求头传递jwt token数据。
返回数据: JSON
{
"order_id": "20181126102807000000004",
"user": "zxc000",
"total_count": 5,
"total_amount": "52061.00",
"freight": "10.00",
"pay_method": 2,
"status": 1,
"create_time": "2018-11-26T18:28:07.470959+08:00",
"skus": [
{
"count": 1,
"price": "6499.00",
"sku": {
"name": "Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机",
"default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRZCqAUxp9AAFti6upbx41220032"
}
},
......
]
}
返回值 | 类型 | 是否必须 | 说明 |
---|---|---|---|
order_id | int | 是 | 订单id |
user | str | 是 | 用户名 |
total_count | int | 是 | 商品总量 |
total_amount | int | 是 | 总价 |
freight | int | 是 | 运费 |
pay_method | int | 是 | 支付方式 |
status | int | 是 | 订单状态 |
create_time | date | 是 | 订单日期 |
skus | 数组 | 是 | 订单商品信息 |
后端实现
class OrdersView(ModelViewSet):
serializer_class = OrderSeriazlier
queryset = OrderInfo.objects.all()
pagination_class = PageNum
序列化器的定义,在返回数据时涉及到三张表的嵌套返回,订单基本信息表,订单商品表,商品sku表
class SKUSerialzier(serializers.ModelSerializer):
"""
商品sku表序列化器
"""
class Meta:
model=SKU
fields=('name','default_image')
class OrderGoodsSerialziers(serializers.ModelSerializer):
"""
订单商品序列化器
"""
# 嵌套返回sku表数据
sku=SKUGoodsSerializer(read_only=True)
class Meta:
model=OrderGoods
fields=('count','price','sku')
class OrderSeriazlier(serializers.ModelSerializer):
"""
订单序列化器
"""
# 关联嵌套返回 用户表数据和订单商品表数据
user=serializers.StringRelatedField(read_only=True)
skus=OrderGoodsSerialziers(many=True,read_only=True)
class Meta:
model = OrderInfo
fields = '__all__'
6.3.更新订单表状态数据
点击修改状态,完成订单表状态的修改操作
接口分析
请求方式: PUT
/meiduo_admin/orders/(?P<order_id>\d+)/status/
请求参数: 通过请求头传递jwt token数据。
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
status | str | 是 | 订单状态 |
返回数据: JSON
{
"order_id": "20181126102807000000004",
"status": 1
}
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
order_id | str | 是 | d订单id |
status | int | 是 | 订单状态 |
后端实现
class OrdersView(ModelViewSet):
serializer_class = OrderSeriazlier
queryset = OrderInfo.objects.all()
pagination_class = PageNum
# 在视图中定义status方法修改订单状态
@action(methods=['put'], detail=True)
def status(self, request, pk):
# 获取订单对象
order = self.get_object()
# 获取要修改的状态值
status = request.data.get('status')
# 修改订单状态
order.status = status
order.save()
# 返回结果
ser = self.get_serializer(order)
return Response({
'order_id': order.order_id,
'status': status
})