商品列表页

获取商品列表数据

业务需求

需要对商品数据进行分页支持,并且可以按照创建时间(默认)、价格、销量(人气)进行排序。

后端接口设计

请求方式: GET /categories/(?P<category_id>\d+)/skus?page=xxx&page_size=xxx&ordering=xxx

请求参数: 路径参数 + 查询字符串参数

参数类型是否必须说明
categroy_id int 类别id(第三级类别)
page int 页数
page_size int 每页数量
ordering str 排序关键字('create_time', 'price', 'sales')

返回数据: JSON

{
    "count": 14,
    "next": "http://api.meiduo.site:8000/categories/115/skus/?page=2",
    "previous": null,
    "results": [
        {
            "id": 3,
            "name": "Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机",
            "price": "6499.00",
            "default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRZCqAUxp9AAFti6upbx41220032",
            "comments": 0
        },
        {
            "id": 4,
            "name": "Apple iPhone 8 Plus (A1864) 256GB 金色 移动联通电信4G手机",
            "price": "7988.00",
            "default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRZa6ANO_sAAFti6upbx40753757",
            "comments": 0
        }
    ]
}
返回值类型是否必须说明
count int 数据总数
next url 下一页的链接地址
previous url 上一页的链接地址
results sku[] 商品sku数据列表
id int 商品sku 编号
name str 商品名称
price decimal 单价
default_image_url str 默认图片
comments int 评论量

后端实现

在meiduo_mall/utils中创建pagination.py文件,在其中创建分页配置类

from rest_framework.pagination import PageNumberPagination

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 2
    page_size_query_param = 'page_size'
    max_page_size = 20

在配置文件中设置REST framework分页使用的分页类

REST_FRAMEWORK = {
    ...
    # 分页
    'DEFAULT_PAGINATION_CLASS': 'meiduo_mall.utils.pagination.StandardResultsSetPagination',
}

序列化器采用之前实现的SKUSerializer。

在goods/views.py中实现视图

from rest_framework.filters import OrderingFilter

class SKUListView(ListAPIView):
    """
    sku列表数据
    """
    serializer_class = SKUSerializer
    filter_backends = (OrderingFilter,)
    ordering_fields = ('create_time', 'price', 'sales')

    def get_queryset(self):
        category_id = self.kwargs['category_id']
        return SKU.objects.filter(category_id=category_id, is_launched=True)
说明:

REST framework提供了对于排序的支持,使用REST framework提供的OrderingFilter过滤器后端即可。

OrderingFilter过滤器要使用ordering_fields 属性来指明可以进行排序的字段有哪些。

posted @ 2018-07-30 22:12  程序视界  阅读(167)  评论(0编辑  收藏  举报