REST framework提供了分页的支持。
我们可以在 settings.py
配置文件中设置全局的分页方式,如:
REST_FRAMEWORK = {
...
# 全局分页,一旦设置了全局分页,那么我们drf中的视图扩展类里面的list方法提供的列表页都会产生分页的效果。所以一般不用全局分页
‘DEFAULT_PAGINATION_CLASS‘: ‘rest_framework.pagination.PageNumberPagination‘,
‘PAGE_SIZE‘: 2 # 每页显示两条数据
...
}
也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_class
属性来指明。
from rest_framework.pagination import PageNumberPagination
# 自定义分页类
class LargeResultsSetPagination(PageNumberPagination):
# 默认每页显示10条数据
page_size = 10
# 根据‘page_size‘关键字自定义每页显示多少条数据
page_size_query_param = ‘page_size‘
# 自定义‘pag‘关键字查询具体某一页的数据(默认为‘page‘)
# 如:?pag=3 即查询第三页的数据
page_query_param = ‘pag‘
# 每页最多显示15条数据
# 克制 ?page_size=20,这样自定义无效,每页最多显示15条数据
max_page_size = 15
class BookDetailView(RetrieveAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
# 声明自定义的分页配置类
pagination_class = LargeResultsSetPagination
注意:如果在视图内关闭分页功能,只需在视图内设置
pagination_class = None
前端访问网址形式:
GET http://127.0.0.1:8000/students/?page=4
可以在子类中定义的属性:
# 声明分页的配置类
from rest_framework.pagination import PageNumberPagination
class StandardPageNumberPagination(PageNumberPagination):
# 默认每页显示10条数据
page_size = 10
# 根据‘page_size‘关键字自定义每页显示多少条数据
page_size_query_param = ‘page_size‘
# 自定义‘pag‘关键字查询具体某一页的数据(默认为‘page‘)
# 如:?pag=3 即查询第三页的数据
page_query_param = ‘pag‘
# 每页最多显示15条数据
# 克制 ?page_size=20,这样自定义无效,每页最多显示15条数据
max_page_size = 15
class StudentAPIView(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentModelSerializer
pagination_class = StandardPageNumberPagination
# 127.0.0.1/four/students/?pag=1&page_size=5
前端访问网址形式:#其实就是通过偏移量来取数据
GET http://127.0.0.1/four/students/?limit=100&offset=400 #从下标为400的记录开始,取100条记录
可以在子类中定义的属性:
PAGE_SIZE
设置一致from rest_framework.pagination import LimitOffsetPagination
class StandardLimitOffsetPagination(LimitOffsetPagination):
# 默认每一页查询的数据量,类似上面的page_size
default_limit = 2
limit_query_param = "size"
offset_query_param = "start"
class StudentAPIView(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentModelSerializer
# 调用页码分页类
# pagination_class = StandardPageNumberPagination
# 调用查询偏移分页类
pagination_class = StandardLimitOffsetPagination
原文:https://www.cnblogs.com/fengting0913/p/13522777.html