商品列表页

获取商品列表数据

业务需求

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

后端接口设计

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

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

参数类型是否必须说明
categroy_idint类别id(第三级类别)
pageint页数
page_sizeint每页数量
orderingstr排序关键字('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 } ] } 
返回值类型是否必须说明
countint数据总数
nexturl下一页的链接地址
previousurl上一页的链接地址
resultssku[]商品sku数据列表
idint商品sku 编号
namestr商品名称
pricedecimal单价
default_image_urlstr默认图片
commentsint评论量
后端实现

在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 属性来指明可以进行排序的字段有哪些。

转载于:https://www.cnblogs.com/hzlnice/p/9393111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值