rest_framework的分页器组件配置与使用

分页器的局部使用:主要有两个分页器组件PageNumberPagination,  LimitOffsetPagination

对指定的数据表类进行分页

先自定义分页器类,该类可以继承两个分页器中的任何一个,然后重写要自定义的配置属性 ,实例代码如下:

1 from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination
2 class MyPage(PageNumberPagination):
3     page_size = 2     #分页显示的记录条数
4     page_query_param = "page"     #分页的检索字段
5     page_size_query_param ="size"   #页码数字段
6     max_page_size = 3           #最大显示记录数

分页器是选择性使用的:

1 class MyLim(LimitOffsetPagination):
2     default_limit = 1
3     max_limit = 3

分页器类创建完成后,可以加入视图类里

可以在视图类的list查询所有数据对应的方法下去写(重写list方法):

 1 class BookShow(viewsets.ModelViewSet):
 2    
 3     queryset = Book.objects.all()
 4     serializer_class = BookModelSerializers
 5     def list(self, request, *args, **kwargs):
 6         # print(request.user)
 7         # print(request.auth)
 8         book_list=Book.objects.all()
 9         mp=MyPage()  #实例化一个分页器对象
10         book_page=mp.paginate_queryset(book_list,request,self)
11 
12 
13         bs=BookModelSerializers(book_page,many=True,context={"request":request})
14         return Response(bs.data)

也可以直接用rest_farmwork内部配置好的方法去实现分页,本质上它只是需要我们去指定要使用的分页器类

1 class PublishDeteal(viewsets.ModelViewSet):
2     queryset = Publish.objects.all()
3     serializer_class = PublishShowSerializers
4     pagination_class=MyPage

它能获取这个配置信息,便能实现分页。

*******************************************************************************

全局分页本质上和认证权限频率组件是一样的,在settings里面的REST_FARMWORK字典里面配置

# "PAGE_SIZE":3

 

posted @ 2018-11-11 21:59  青红*皂了个白  阅读(452)  评论(0编辑  收藏  举报