zoukankan      html  css  js  c++  java
  • 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)
     
     
  • 相关阅读:
    BZOJ.1034.[ZJOI2008]泡泡堂(贪心)
    BZOJ.4247.挂饰(背包DP)
    Codeforces.1040E.Network Safety(思路 并查集)
    LOJ.2863.[IOI2018]组合动作(交互)
    BZOJ.3624.[APIO2008]免费道路(Kruskal)
    BZOJ.4237.稻草人(CDQ分治 单调栈)
    BZOJ.3551.[ONTAK2010]Peaks加强版(Kruskal重构树 主席树)
    BZOJ.4946.[NOI2017]蔬菜(贪心 离线)
    BZOJ.2660.[BJOI2012]最多的方案(DP)
    BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/yimiflh/p/9280921.html
Copyright © 2011-2022 走看看