商品列表页
需要对商品数据进行分页支持,并且可以按照创建时间(默认)、价格、销量(人气)进行排序。
后端接口设计
请求方式: GET /categories/(?P<category_id>\d+)/skus?page=xxx&page_size=xxx&ordering=xxx
请求参数: 路径参数 + 查询字符串参数
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
categroy_id | int | 是 | 类别id(第三级类别) |
page | int | 是 | 页数 |
page_size | 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'] # 取出分类 id
return SKU.objects.filter(category_id=category_id, is_launched=True) # 过滤出分类 id 里面的商品数据
说明:
REST framework提供了对于排序的支持,使用REST framework提供的OrderingFilter过滤器后端即可。
**OrderingFilter过滤器要使用ordering_fields 属性来指明可以进行排序的字段有哪些。