本文共 2313 字,大约阅读时间需要 7 分钟。
REST framework提供了分页的支持。
我们可以在配置文件中设置全局的分页方式,如:
REST_FRAMEWORK = { # 全局分页,一旦设置了全局分页,那么我们drf中的视图扩展类里面的list方法提供的列表页都会产生分页的效果。所以一般不用全局分页 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100 # 每页最大数据量}
也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_class
属性来指明。
class LargeResultsSetPagination(PageNumberPagination): page_size = 1000 #每页显示多少条 #127.0.0.1:8001/students/?page=5&page_size=10 page_size_query_param = 'page_size' max_page_size = 10000class BookDetailView(RetrieveAPIView): queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer pagination_class = LargeResultsSetPagination
注意:如果在视图内关闭分页功能,只需在视图内设置
pagination_class = None
1) PageNumberPagination
前端访问网址形式:
GET http://127.0.0.1:8000/students/?page=4
可以在子类中定义的属性:
# 声明分页的配置类from rest_framework.pagination import PageNumberPaginationclass StandardPageNumberPagination(PageNumberPagination): # 默认每一页显示的数据量 page_size = 2 # 允许客户端通过get参数来控制每一页的数据量 page_size_query_param = "size" max_page_size = 10 #客户端通过size指定获取数据的条数时,最大不能超过多少 # 自定义页码的参数名 page_query_param = "p"class StudentAPIView(ListAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer pagination_class = StandardPageNumberPagination# 127.0.0.1/four/students/?p=1&size=5
2)LimitOffsetPagination
前端访问网址形式:#其实就是通过偏移量来取数据
GET http://127.0.0.1/four/students/?limit=100&offset=400 #从下标为400的记录开始,取100条记录
可以在子类中定义的属性:
PAGE_SIZE
设置一致from rest_framework.pagination import LimitOffsetPaginationclass StandardLimitOffsetPagination(LimitOffsetPagination): # 默认每一页查询的数据量,类似上面的page_size default_limit = 2 limit_query_param = "size" #默认是limit offset_query_param = "start" #默认是offsetclass StudentAPIView(ListAPIView): queryset = Student.objects.all() serializer_class = StudentModelSerializer # 调用页码分页类 # pagination_class = StandardPageNumberPagination # 调用查询偏移分页类 pagination_class = StandardLimitOffsetPagination
转载地址:http://agqzi.baihongyu.com/