zoukankan      html  css  js  c++  java
  • Django

    目录

    • 前提
    • 分页,看第n页,每页显示n条数据
    • 分页,在n个位置,向后查看n条数据
    • 加密分页,把上一页和下一页的id值记住

    1, 前提

    • rest framework中提供三种分页:
    from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
    
    • 全局配置文件:
    REST_FRAMEWORK = {
        'PAGE_SIZE': 2
    }
    

    2, 分页,看第n页,每页显示n条数据

    2.1 分页

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

    2.2 视图

    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)
    

    2.3 返回带页码链接的响应

    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)
    

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

    3.1 分页

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

    3.2 视图

    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)
    

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

    4.1 分页

    # 加密分页
    class MyCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'
        page_size = 1
        ordering = '-id'
    

    4.2 视图

    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)
    
  • 相关阅读:
    Python在计算内存时应该注意的问题?
    如何高效地远程部署?自动化运维利器 Fabric 教程
    强大的 Python 任务自动化工具!invoke 十分钟入门指南
    进一步学习 nox 教程,轻松掌握命令行用法
    Oracle Solaris 11.4安装桌面/gdb
    Solaris 10上Oracle 10g安装步骤图解
    Oracle Solaris 10图文安装
    读取模式下cbc latch的事件模拟(热块竞争和热链竞争)-P62
    关于位图数据位和系统管理区大小-P6
    关于位图数据和标记位-P3
  • 原文地址:https://www.cnblogs.com/xiaoqshuo/p/10032231.html
Copyright © 2011-2022 走看看