天天看点

DRF实战6 - 订单管理6 - 订单管理

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
        })