zoukankan      html  css  js  c++  java
  • rest-framework之分页器

    一 简单普通分页PageNumberPagination(查看第n页,每页显示n条)

    第一种:类似于原来django中的分页

    from rest_framework.views import APIView
    from rest_framework.viewsets import ViewSetMixinfrom app01 import MySer
    from rest_framework.pagination import PageNumberPagination

    # 每页显示3条,每页的显示条数(默认)
    page_size = 3
    # 查询的key,问好后面的key,查询的时候,按哪个字段查
    page_query_param = 'aa'
    # 指定当前页显示多少条,当前页的每页大小(用户指定的)
    page_size_query_param = 'size'
    # 每页最多显示3条,每页显示最大条数
    max_page_size = 3

    class Book(ViewSetMixin, APIView):
        def get_all(self, request):
            response = {'status': 100, 'msg': '查询成功'}
            book_list = models.Book.objects.all()
            # 实例化产生一个分页对象
            page = PageNumberPagination()
            # 不继承来修改对象的值
            page.page_size=2
            page.page_query_param='bb'
            # page = MyPageNumberPagination()
            # 第一个参数:要分页的数据,第二个参数:request对象,第三个参数:当前的视图对象
            page_list = page.paginate_queryset(book_list, request, self)
            # 再序列化的时候,用分页之后的数据
            ser = MySer.BookSerializers(instance=page_list, many=True)
            response['data'] = ser.data
            # return Response(response)
            # 会带着链接,和总共的条数,不建议使用
            return page.get_paginated_response(ser.data)
            # return Response(ser.data)

    setting里

    REST_FRAMEWORK = {
        # 每页显示两条
        'PAGE_SIZE':2
    }

    二 偏移分页LimitOffsetPagination(在第n个位置,向后查看n条数据)

    #每页显示的条数
    default_limit = api_settings.PAGE_SIZE
    #标杆值,当前所在的条数
    offset_query_param = 'offset'
    #往后偏移多少条数
    limit_query_param = 'limit'
    #每页显示最大的条数                
    max_limit = None
    ****要取的条数,如果超过了,还剩多少,就显示多少

    # 偏移分页
    from rest_framework.pagination import LimitOffsetPagination

    class Book(ViewSetMixin, APIView):
    def get_all(self, request):
    response = {'status': 100, 'msg': '查询成功'}
    book_list = models.Book.objects.all()
    # 实例化产生一个偏移分页的对象
    page = LimitOffsetPagination()
    # 每页显示3条
    page.default_limit = 3
    # 每页显示的最大条数
    page.max_limit = 4


    page_list = page.paginate_queryset(book_list, request, self)
    ser = MySer.BookSerializers(instance=page_list, many=True)
    return Response(ser.data)

    三.加密分页CursorPagination(只能看上一页和下一页,查询速度快)

    # 加密分页,只能上一页下一页的翻,不能指定要到哪一页

    加密分页(查询速度快)
    #按nid排序
    page.ordering = 'nid'
    #查询的key值
    cursor_query_param = 'cursor'
    #每页显示多少条
    page_size = api_settings.PAGE_SIZE


    from rest_framework.pagination import CursorPagination class Book(ViewSetMixin, APIView): def get_all(self, request): response = {'status': 100, 'msg': '查询成功'} book_list = models.Book.objects.all() # 实例化产生一个加密分页的对象 page = CursorPagination() # 按nid排序 page.ordering='nid' page_list = page.paginate_queryset(book_list, request, self) # 丢到序列化类中,完成序列化 ser = MySer.BookSerializers(instance=page_list, many=True) # 最后返回数据 return page.get_paginated_response(ser.data)

    分页总结使用:

    分页器
            三种分页:
                第一种:类似于原来django中的分页
                    -page_size = api_settings.PAGE_SIZE
                    -page_query_param = 'page'
                    -page_size_query_param
                    -max_page_size
                    
                    
                第二种:偏移分页
                    #每页显示的条数
                    default_limit = api_settings.PAGE_SIZE
                    #标杆值
                    offset_query_param = 'offset'
                    #往后偏移多少
                    limit_query_param = 'limit'
                    #每页显示最大的条数                
                    max_limit = None
                    
                    ****要取的条数,如果超过了,还剩多少,就显示多少
                    
                第三种:加密分页(查询速度快)
                    #按nid排序
                    page.ordering = 'nid'
                    #查询的key值
                    cursor_query_param = 'cursor' 
                    #每页显示多少条
                    page_size = api_settings.PAGE_SIZE
                    
            使用:
                -生成一个对象(普通,偏移,加密)
                    --***重点:可以修改对象的属性
                -ret=对象.paginate_queryset(book_list, request, self)
                    
                -丢到序列化类中,完成序列化,
                -最后返回
    View Code
  • 相关阅读:
    Windows Mobile下创建cmwap接入点
    我的云之旅hadoop单机设置(2)
    ssh登录
    我的云之旅前言(1)
    实时搜索将是下一个核心
    cassandra索引目录
    图书大甩卖(操作系统、C语言、Linux) 已成交
    ehcache实例
    google推出语音搜索
    百姓网看起来还行
  • 原文地址:https://www.cnblogs.com/cao123/p/10139725.html
Copyright © 2011-2022 走看看