Django 项目总结(9)- 商品列表页

商品列表页

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

后端接口设计

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

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

参数类型是否必须说明
categroy_idint类别id(第三级类别)
pageint页数
page_sizeint每页数量
后端实现

在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']  # 取出分类 id
        return SKU.objects.filter(category_id=category_id, is_launched=True)  # 过滤出分类 id 里面的商品数据

说明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值