分页组件
分页组件
查询所有,才有分页功能(例如网站的下一页功能,app下挂加载更多)
PageNumberPagination基本分页
重要类属性
- page_size = api_settings.PAGE_SIZE (每页显示条数)
- page_query_param = 'page' (查询时用的参数)
- page_size_query_param = None (更改返回条数)
- max_page_size = None (每页最大显示条数)
基本定义
# 1 导入 PageNumberPagination 类
from rest_framework.pagination import PageNumberPagination
# 2 写一个类继承PageNumberPagination类
class CommonPageNumberPagination(PageNumberPagination):
page_size = 2 # 每页正常显示2条
page_query_param = 'page' # 查询页数时用的参数
page_size_query_param = 'size' # 更改每页显示的条数
max_page_size = 5 # 每页最多显示的条数 即使 size = 99999 也最多是5条
简单使用
class NormalBookView(GenericViewSet, RetrieveModelMixin, ListModelMixin):
serializer_class = BookSerializer
queryset = Book.objects.all()
# 要注意 在设置分页器的时候不是一个列表!!!
pagination_class = CommonPageNumberPagination
LimitOffsetPagination偏移分页
偏移的意思就是--->偏移到第几条 就从第几条数据开始查
重要的类属性
- default_limit = api_settings.PAGE_SIZE (每页显示条数)
- limit_query_param = 'limit' (查询时用的参数)
- offset_query_param = 'offset' (offset偏移的查询参数)
- max_limit = None (每页最大显示条数)
基本定义
class CommonLimitOffsetPagination(LimitOffsetPagination):
default_limit = 3 # 每页显示的条数
limit_query_param = 'limit' # 查询时使用的参数
offset_query_param = 'offset' # 偏移的参数
max_limit = '5' # 每页最大的显示条数
简单使用
class NormalBookView(GenericViewSet, RetrieveModelMixin, ListModelMixin):
serializer_class = BookSerializer
queryset = Book.objects.all()
# 要注意 在设置分页器的时候不是一个列表!!!
pagination_class = CommonLimitOffsetPagination
CursorPagination游标分页
重要的类属性
- cursor_query_param = 'cursor' (查询条件)
- page_size = api_settings.PAGE_SIZE (每页显示条数)
- ordering = '-created' (排序)
- page_size_query_param = None (更改每页显示条数)
- max_page_size = None (每页最大显示条数)
使用
# 1 写一个类,继承LimitOffsetPagination,重写4个类属性
class CommonCursorPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 2
ordering = '-id'
page_size_query_param = 'offset'
max_page_size = 5
# 2 在视图类中配置写好的分页类
class BookAPIView(ViewSetMixin, ListAPIView):
queryset = models.Books.objects.all()
serializer_class = BookModelSerializer
pagination_class = CommonCursorPagination
优缺点
# 优点:速度最快,数据量越大,越有优势(没有那么大的数据量,用的不多)
# 缺点:只能前一页和后一页,不能直接跳到某一页