官方文档(这里)
用于分页的模块:分页
其他Django框架有内置分页模块,无需额外安装,只需做简单的配置。
配置什么呢& # 63;就是告诉Django要用到什么样的分页样式,比如:返回哪些字段,每页的大小,请求参数的名称等等。
1.设置。py文件里做全局的配置
2.单独为每个需要分页的视图分配自定义分页器。
途径1是为所有继承ListViewAPI的接口做默认配置,途径2对单独一个接口做个性化配置。
需要注意的是:途径1做了全局的配置,所有继承ListAPIView的接口,默认都会有分页。这会影响到现有接口返回数据的结构。除了这一点,途径1还是相当不错的。
我比较喜欢仅使用途径2,我可以自定义了一个通用型的分页器,只为有需要分页的视图分配分页器,也是挺方便的。
REST_FRAMEWORK={ #…… “DEFAULT_PAGINATION_CLASS”:“rest_framework.pagination.PageNumberPagination”, 的页大小:100 } >之前DEFAULT_PAGINATION_CLASS:默认分页器(BasePagination的子类)。Django提供了3个类型:PageNumberPagination, LimitOffsetPagination CursorPagination。不同类型返回的分页信息不同。也可以是你自定义的分页器。
页大小:分页大小。
这里将示例使用自定义分页器的流程。
新建一个段落码。py用于写分页器:
我们在段落码。py文件里写一个通用的分页器:
类StandarPagination (PageNumberPagination): 页大?20 #默认每页显示条数配置 page_query_param=耙趁妗?”页数”的请求参数名称,默认是页面 page_size_query_param='页大小#”分页大小”的请求参数名称 #进入父类PageNumberPagination可看响应体返回字段。 # def get_paginated_response(自我、数据): #返回响应(OrderedDict ([ #(“计数”,self.page.paginator.count), # (“next”self.get_next_link ()), #(‘前’,self.get_previous_link ()), #(“结果”,数据) #))) #觉得不适用,那就拷贝出来,重载函数,自己多加几个字段。 #(可通过官方文档或直接调试得知从哪些属性获取正确的值)。 def get_paginated_response(自我、数据): 返回响应(OrderedDict ([ (“计数”,self.page.paginator.count), (“下一个”,self.get_next_link ()), ('以前',self.get_previous_link ()), (“页面”,self.page.number), (“total_page”, self.page.paginator.num_pages), (页大小,self.page.paginator.per_page), (“结果”,数据) ])) >之前(更多的属性介绍请查看文档)
为接口分配分页器,为属性pagination_class赋值即可。
从rest_framework。分页进口PageNumberPagination 类MyListAPI (ListAPIView): queryset=TestModel.objects.filter () serializer_class=TestModelSerializer pagination_class=StandarPagination #新增 >之前完成!
假如该接口请求地址是http://api/test/
看客户端是如何请求接口的:
http://api/test/返回第一页,分页大小是20。
http://api/test/& # 63;页面=2,页大?10:返回第二页,分页大小是10。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Django REST框架分页的实现代码