rest_framework-07-分页-渲染器

 

rest_framework-07-分页-渲染器

 

 渲染器的作用:序列化、友好的展示

分页

a. PageNumberPagination分页,看第n页,每页显示n条数据;上一页和下一页。

1.

2.

 

 3.

 

4.

5.渲染器  先配置settings.py文件,必须有rest_framework

 

 

 6.

 

7.效果 好看的数据

8.也可以显示json数据

9.用分页模块,settings.py先配置每页显示的数量

 

10.引入分页模块。

运行结果:

 

11.序列化分页后的数据。

 

运行结果:

 

12.传参数分页。默认显示第一页。其他页的数据怎么看?需要转参数。

 

13.源码,settings.py每页显示2条数据。默认为空。如果想显示更多,比如每页显示3条、10条数据.接下来自定的分类对象。

14.自定义分类对象

运行结果:默认每页2条数据,页可以传参数。每页显示3条数据。

15.最多每页显示5条数据。2-5条数据之间随意调配。

运行结果:

 

16.返回HttpResponse

运行结果:有上一页,下一页都做好了

 

b. LimitOffsetPagination索引分页,在n个位置,向后查看n条数据;

1.第二种分页类

2.类源码

3.运行结果:从索引为2的数据开始向后查询。settings.py文件配置每页显示的数量是2

 

4.索引从4开始,向后查询3条数据

 

 5.自定义

c. 加密分页CursorPagination,排序。

1,源码:

2.假设一id来排序,加负号则倒序

 settings.py文件不变

 

运行结果;

 3.正序,默认第一页

运行结果:

4.假设想看第2页的数据,分页加密了,看不了。

 

5. 返回HttpResponse,有上一页和下一页

运行结果:有上下页的链接

优点:避免用户写太多的数字,影响性能、速度、数据查询慢。

 

10:源码还原。

 

11.自定义类

 

运行结果:

 

总结:

    1. 分页
        a. 分页,看第n页,每页显示n条数据;
            from rest_framework.pagination import PageNumberPagination

            class MyPageNumberPagination(PageNumberPagination):

                page_size = 2
                page_size_query_param = 'size'
                max_page_size = 5
                page_query_param = 'page'

            class Pager1View(APIView):

                def get(self,request,*args,**kwargs):

                    # 获取所有数据
                    roles = models.Role.objects.all()

                    # 创建分页对象
                    # pg = MyPageNumberPagination()
                    pg = PageNumberPagination()

                    # 在数据库中获取分页的数据
                    pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)

                    # 对数据进行序列化
                    ser = PagerSerialiser(instance=pager_roles, many=True)

                    return Response(ser.data)
                    # return pg.get_paginated_response(ser.data)
        
        
        b. 分页,在n个位置,向后查看n条数据;
                            
                from api.utils.serializsers.pager import PagerSerialiser
                from rest_framework.response import Response
                from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination


                class MyLimitOffsetPagination(LimitOffsetPagination):
                    default_limit = 2
                    limit_query_param = 'limit'
                    offset_query_param = 'offset'
                    max_limit = 5


                class Pager1View(APIView):

                    def get(self,request,*args,**kwargs):

                        # 获取所有数据
                        roles = models.Role.objects.all()

                        # 创建分页对象
                        # pg = MyLimitOffsetPagination()
                        pg = LimitOffsetPagination()

                        # 在数据库中获取分页的数据
                        pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)

                        # 对数据进行序列化
                        ser = PagerSerialiser(instance=pager_roles, many=True)

                        return Response(ser.data)
                        # return pg.get_paginated_response(ser.data)
        
        
        
        c. 加密分页,上一页和下一页。
            
            from api.utils.serializsers.pager import PagerSerialiser
            from rest_framework.response import Response
            from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination

            class MyCursorPagination(CursorPagination):
                cursor_query_param = 'cursor'
                page_size = 2
                ordering = 'id'
                page_size_query_param = None
                max_page_size = None

            class Pager1View(APIView):

                def get(self,request,*args,**kwargs):

                    # 获取所有数据
                    roles = models.Role.objects.all()

                    # 创建分页对象
                    # pg = CursorPagination()
                    pg = MyCursorPagination()

                    # 在数据库中获取分页的数据
                    pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)

                    # 对数据进行序列化
                    ser = PagerSerialiser(instance=pager_roles, many=True)

                    # return Response(ser.data)
                    return pg.get_paginated_response(ser.data)

 

 
 
posted @ 2018-07-08 18:55  yimi+fly  阅读(148)  评论(0编辑  收藏  举报