使用rest_fromwork分页

可以用自带得分页工具,在settings配置一下就可以了

REST_FRAMEWORK = {
    #分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    #每页显示的个数
    'PAGE_SIZE': 10,
}

 

自定义分页:(要继承PageNumPagination【需要引入】)

 


from rest_framework.pagination import PageNumberPagination

class GoodsPagination(PageNumberPagination): ''' 商品列表自定义分页 ''' #默认每页显示的个数 page_size = 10 #可以动态改变每页显示的个数 page_size_query_param = 'page_size' #页码参数 page_query_param = 'page' #最多能显示多少也 max_page_size = 100

 

在视图函数里指定:

class GoodlistViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    '商品列表页'

    queryset = Goods.objects.all().order_by('-id')     #指定要获取得查询对象
    #分页
    pagination_class = GoodsPagination
    serializer_class = GoodsSerializer          #指定要序列化的模型类
    filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter)         #指定要过滤的内容,搜索的,排序的

    #设置filter的类为我们自定义的类
    filter_class = GoodsFilter
    # 搜索,=name表示精确搜索,也可以使用各种正则表达式
    search_fields = ('=name', 'goods_brief')
    # 排序
    ordering_fields = ('sold_num', 'add_time')

 fileters.py 指定商品过滤的类

import django_filters

from .models import Goods

class GoodsFilter(django_filters.rest_framework.FilterSet):
    '''
    商品过滤的类
    '''
    #两个参数,name是要过滤的字段,lookup是执行的行为,‘小于等于本店价格’
    price_min = django_filters.NumberFilter(field_name="shop_price",lookup_expr='gte')
    price_max = django_filters.NumberFilter(field_name='shop_price',lookup_expr='lte')


    class Meta:
        model = Goods
        fields = ['price_min','price_max']

 

上一篇:vue table筛选设置默认值


下一篇:Vuex--其他属性的使用