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

  • 相关阅读:
    第十八周个人作业
    十六周个人作业
    个人作业
    第十四周总结
    第十三周周末总结
    排球计分程序说明书
    我和计算机
    排球比赛记分员
    逻辑思维怎样成为一个高手
    用户故事排球教练助手
  • 原文地址:https://www.cnblogs.com/wenyule/p/10440738.html
Copyright © 2011-2022 走看看