zoukankan      html  css  js  c++  java
  • drf7 分页组件

    DRF的分页

    数据库有几千万条数据,这些数据需要展示,不可能直接从数据库把数据全部读取出来,

    这样会给内存造成特别大的压力,有可能还会内存溢出,所以希望一点一点的取,那展示的时候也是一样的,总是要进行分页显示,

    DRF给提供了三种分页方式,看下他们都是什么样的~~

    分页组件的使用

    DRF提供的三种分页

    全局配置
    REST_FRAMEWORK = {
        'PAGE_SIZE': 2
    }
    

    pageNumber分页

    http://127.0.0.1:8000/book?page=2&size=1

    utils/pagination.py

    自定义分页类

    from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
    
    class MyPagination(PageNumberPagination):
        # xxxx?page=1&size=2
        page_size = 1
        page_query_param = "page"
        page_size_query_param = "size"
        max_page_size = 3
    

    pageDemo/views.py

    from utils.pagination import MyPagination
    class BookView(APIView):
    
        def get(self, request):
            queryset = Book.objects.all()
            # 1,实例化分页器对象
            page_obj = MyPagination()
            # 2,调用分页方法去分页queryset
            page_queryset = page_obj.paginate_queryset(queryset, request, view=self)
            # 3,把分页好的数据序列化返回
            ser_obj = BookSerializer(page_queryset, many=True)
            # 4, 带着上一页下一页连接的响应,返回带超链接 需返回的时候用内置的响应方法
            return page_obj.get_paginated_response(ser_obj.data) #超链接
            # return Response(ret.data)
    

    image

    limitOffset分页

    自定义分页类

    class MyPagination(LimitOffsetPagination):
    
        default_limit = 1
        limit_query_param = "limit"    # 向后找多少条
        offset_query_param = "offset"  # 从第几个开始找
        max_limit = 3

    视图

    # 视图和上面的大体一致
    # 只有用的分页类不同,其他都相同
    class BookView(APIView):
        def get(self, request):
            book_list = Book.objects.all()
            # 分页
            page_obj = MyLimitOffset()
            page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
    
            ret = BookSerializer(page_article, many=True)
            # return Response(ret.data)
            # 返回带超链接 需返回的时候用内置的响应方法
            return page_obj.get_paginated_response(ret.data)
    

    image

    CursorPagination游标分页

    加密游标的分页 把上一页和下一页的id记住

    自定义分页类

    class MyPagination(CursorPagination):
    
        cursor_query_param = "cursor"
        page_size = 2
        ordering = "-id"
    

    视图

    class BookView(APIView):
        def get(self, request):
            book_list = Book.objects.all()
            # 分页
            page_obj = MyCursorPagination()
            page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
    
            ret = BookSerializer(page_article, many=True)
            # return Response(ret.data)
            # 返回带超链接 需返回的时候用内置的响应方法
            return page_obj.get_paginated_response(ret.data)
    

    对url进行了加密,还支持对数据排序

    image

    7

  • 相关阅读:
    取出session中的所有属性与值的方法
    jqGrid几个需要注意的默认设置
    java语言中除数为零问题
    java语言中Object转为String的几种形式
    highCharts提示框不显示的问题
    jqGrid使用setColProp方法动态改变列属性
    jgGrid中的editrules使用函数来进行验证
    大坝安全监测系统预警值上下限设定
    谓词 (NSPredicate)使用详情
    kvc(键-值编码)
  • 原文地址:https://www.cnblogs.com/wenyule/p/10440738.html
Copyright © 2011-2022 走看看