博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRF之分页组件
阅读量:3961 次
发布时间:2019-05-24

本文共 2313 字,大约阅读时间需要 7 分钟。

一. 分页Pagination

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

可以在子类中定义的属性:

  • page_size 每页数目
  • page_query_param 前端发送的页数关键字名,默认为"page"
  • page_size_query_param 前端发送的每页数目关键字名,默认为None
  • max_page_size 前端最多能设置的每页数量
# 声明分页的配置类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条记录

可以在子类中定义的属性:

  • default_limit 默认限制,每页数据量大小,默认值与PAGE_SIZE设置一致
  • limit_query_param limit参数名,默认’limit’ , 可以通过这个参数来改名字
  • offset_query_param offset参数名,默认’offset’ ,可以通过这个参数来改名字
  • max_limit 最大limit限制,默认None, 无限制
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/

你可能感兴趣的文章
[连载] Socket 深度探索 4 PHP (一)
查看>>
[无线] Android 系统开发学习杂记
查看>>
[无线] 浅析当代 LBS 技术
查看>>
[杂感] 缅怀乔布斯
查看>>
[无线] 让Android支持cmwap上网
查看>>
[无线] AndroidManifest.xml配置文件详解
查看>>
[移动] Mosquitto简要教程(安装/使用/测试)
查看>>
[HTML5] 关于HTML5(WebGL)的那点事
查看>>
自我反思
查看>>
初识网络编程
查看>>
东北赛选拔教训
查看>>
hash
查看>>
涨姿势了:求两个分子的最大公倍数
查看>>
快速幂
查看>>
vector.reserve and resize &&vector与map结合
查看>>
最长公共子序列
查看>>
计算几何
查看>>
求解方程
查看>>
太弱了。。水题
查看>>
位运算(含应用)
查看>>