zoukankan      html  css  js  c++  java
  • rest framework-分页-长期维护

    ###############  分页组件   ###############

    # 分页组件
    # 
    # django也有分页,rest framework也有分页,但是没有页面这个概念了,
    # 这个分页是返回给前端数据太多的时候,需要分页返回,
    # http://127.0.0.1:8000/books/?page=1,
    # 我们需要把继承这个分页类,然后重写一些方法,
    # class MyPageNumberPagination(PageNumberPagination):
    # page_size =2
    # page_query_param = "page"
    # page_size_query_param = "size"
    # #####################################
    # http://127.0.0.1:8000/books/?page=1&size=1
    # 默认显示两个,但是可以自己指定显示几个,
    # #########################################
    # http://127.0.0.1:8000/books/?limit=3
    # http://127.0.0.1:8000/books/?limit=3&offset=1,这是偏移,
    # #############################################
    #     pagination_class = MyPageNumberPagination
    # 这视图里面加上这一句,就会去找我们定义的视图类了, 
    # 所以分页器的使用,就是定义一个分页的类,然后加一句,就可以了,

      

    ############### 第一种分页器:PageNumberPagination   ###############

    按页码数分页,第n页,每页显示m条数据

    例如:http://127.0.0.1:8000/api/article/?page=2&size=1

    分页器:

    class MyPageNumber(PageNumberPagination):
        page_size = 2  # 每页显示多少条
        page_size_query_param = 'size'  # URL中每页显示条数的参数
        page_query_param = 'page'  # URL中页码的参数
        max_page_size = None  # 最大页码数限制

    视图:

    class ArticleList(APIView):
        def get(self, request, *args, **kwargs):
            res = {"code": 0}
            article_list = models.Article.objects.all().order_by("id")
            # 分页
            page_obj = MyPageNumber()
            page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
            ser_obj = ArticleSerializer(page_article, many=True)
            res["data"] = ser_obj.data
            return Response(res)

    返回带页码链接的响应:

    class ArticleList(APIView):
        def get(self, request, *args, **kwargs):
            res = {"code": 0}
            article_list = models.Article.objects.all().order_by("id")
            # 分页
            page_obj = MyPageNumber()
            page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
            ser_obj = ArticleSerializer(page_article, many=True)
            res["data"] = ser_obj.data
            return page_obj.get_paginated_response(res)

    ###############  第二种分页器:LimitOffsetPagination   ###############

    分页,在n位置,向后查看m条数据

    例如:http://127.0.0.1:8000/api/article/?offset=2&limit=2

    分页器:

    # offset分页
    class MyLimitOffset(LimitOffsetPagination):
        default_limit = 1
        limit_query_param = 'limit'
        offset_query_param = 'offset'
        max_limit = 999

    视图:

    class ArticleList(APIView):
        def get(self, request, *args, **kwargs):
            res = {"code": 0}
            article_list = models.Article.objects.all().order_by("id")
            # 分页
            page_obj = MyLimitOffset()
            page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
            ser_obj = ArticleSerializer(page_article, many=True)
            res["data"] = ser_obj.data
            return page_obj.get_paginated_response(res)

    ###############  第三种分页器:CursorPagination   ###############

    加密分页,把上一页和下一页的id值记住

    分页器:

    # 加密分页
    class MyCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'
        page_size = 1
        ordering = '-id'  # 重写要排序的字段

    视图:

    class ArticleList(APIView):
        def get(self, request, *args, **kwargs):
            res = {"code": 0}
            article_list = models.Article.objects.all().order_by("id")
            # 分页
            page_obj = MyCursorPagination()
            page_article = page_obj.paginate_queryset(queryset=article_list, request=request, view=self)
            ser_obj = ArticleSerializer(page_article, many=True)
            res["data"] = ser_obj.data
            # return Response(res)
            return page_obj.get_paginated_response(res)

    ###############  分页组件   ###############

  • 相关阅读:
    ACCP7.0-S2-复习自测-15测试分析
    线程
    多线程下的单例模式
    combobox 属性、事件、方法
    java的多线程总结
    爬虫--登录网页
    shell--字符串是否为空
    python--正则表达式 字符串匹配
    mysql---表所在数据库
    python--日期操作
  • 原文地址:https://www.cnblogs.com/andy0816/p/12293732.html
Copyright © 2011-2022 走看看