首页 > 其他分享 >【DRF-11】rest-framework之分页

【DRF-11】rest-framework之分页

时间:2024-06-04 21:24:01浏览次数:24  
标签:11 ser 条数 rest page framework pg class 分页

  • 前言:总共有三种分页方式
  • 1.根据页码进行分页,看第n页,每页显示n条数据;
from rest_framework.pagination import  PageNumberPagination

class PageGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserGroup
        fields = '__all__'

class MyPageNumberPagination(PageNumberPagination):
    # page_size = api_settings.PAGE_SIZE
    # # 默认每页显示的数据条数,可全局配置
    page_size = 2
    # 获取URL参数中传入的页码key
    page_query_param = 'page'
    # 获取URL参数中设置的每页显示数据条数
    page_size_query_param = "size"
    # 最大支持的每页显示的数据条数
    max_page_size = 5


class PageGroupView(APIView):
    def get(self,request,*args,**kwargs):
        # 获取数据
        obj = models.UserGroup.objects.all()
        # ser = PageGroupSerializer(instance=obj,many=True)
        # ret = json.dumps(ser.data,ensure_ascii=False)

        # 创建分页对象
        pg = MyPageNumberPagination()
        # 在数据库中获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=obj,request=request,view=self)
        # 序列化
        ser = PageGroupSerializer(instance=pager_roles,many=True)
        return HttpResponse(ser.data)

  • 2.位置和个数进行分页,在n个位置,向后查看n条数据
from rest_framework.pagination import  PageNumberPagination,LimitOffsetPagination,CursorPagination

class PageGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserGroup
        fields = '__all__'

class MyLimitOffsetPagination(LimitOffsetPagination):
    # 默认每页显示的数据条数
    default_limit = 3
    # URL中传入的显示数据条数的参数
    limit_query_param = 'limit'
    # URL中传入的数据位置的参数
    offset_query_param = 'offset'
    # 最大每页显得条数
    max_limit = 5


class PageGroupView(APIView):
    def get(self,request,*args,**kwargs):
        # 获取数据
        obj = models.UserGroup.objects.all()
        # ser = PageGroupSerializer(instance=obj,many=True)
        # ret = json.dumps(ser.data,ensure_ascii=False)

        # 创建分页对象
        # pg = MyPageNumberPagination()
        pg = MyLimitOffsetPagination()
        # 在数据库中获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=obj,request=request,view=self)
        # 序列化
        ser = PageGroupSerializer(instance=pager_roles,many=True)
        # return HttpResponse(ser.data)
        return pg.get_paginated_response(ser.data)

  • 2.1:注意点:使用pg.get_paginated_response(ser.data)返回,响应中会多三个参数,总条数,上一页,下一页
"count": 10,
"next": "http://127.0.0.1:8000/api/v1/page1/?limit=3&offset=8",
"previous": "http://127.0.0.1:8000/api/v1/page1/?limit=3&offset=2",
  • 3.游标分页,加密分页,上一页和下一页。
from rest_framework.pagination import  PageNumberPagination,LimitOffsetPagination,CursorPagination

class PageGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserGroup
        fields = '__all__'

class MyCursorPagination(CursorPagination):
    # URL传入的游标参数
    cursor_query_param = 'cursor'
    # 默认每页显示的数据条数
    page_size = 2
    # URL传入的每页显示条数的参数
    page_size_query_param = None
    # 每页显示数据最大条数
    max_page_size = None
    # 根据ID从大到小排列
    ordering = "id"

class PageGroupView(APIView):
    def get(self,request,*args,**kwargs):
        # 获取数据
        obj = models.UserGroup.objects.all()
        # ser = PageGroupSerializer(instance=obj,many=True)
        # ret = json.dumps(ser.data,ensure_ascii=False)

        # 创建分页对象
        # pg = MyPageNumberPagination()
        # pg = MyLimitOffsetPagination()
        pg = MyCursorPagination()
        # 在数据库中获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=obj,request=request,view=self)
        # 序列化
        ser = PageGroupSerializer(instance=pager_roles,many=True)
        # return HttpResponse(ser.data)
        return pg.get_paginated_response(ser.data)

标签:11,ser,条数,rest,page,framework,pg,class,分页
From: https://www.cnblogs.com/xwltest/p/18231738

相关文章

  • 基于springboot在线互动学习网站设计(11726)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 基于springboot校园资产管理系统(11725)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 基于springboot-vue的毕业论文管理系统(11728)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示二、资料项目演示视频介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • Spring-MVC注解支持Ant风格的模糊匹配和Restful风格的接收数据------Spring-MVC框架
    packagecom.alatus.mvc3.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;@ControllerpublicclassIndexController{......
  • java调用 RestTemplate post上传
    publicvoid方法名(){RestTemplaterestTemplate=newRestTemplate();Stringurl="http://目标地址";MultiValueMap<String,String>params=newLinkedMultiValueMap<>();params.add("post传输key",&qu......
  • 配置Tensorflow使用GPU加速(Tensorflow2.6.0,Python3.6-3.9,CUDA11.2,cuDNN8.1)
    目录前言一、安装Anaconda1.1从Anaconda官网下载Anaconda(默认安装最新版本)1.2安装Anaconda并配置环境变量二、安装CUDA和cuDNN2.1下载CUDAToolkit2.2安装CUDAToolkit2.3下载安装cuDNN2.4配置CUDA环境变量三、创建Anaconda虚拟环境并安装Tensorflow3.1创建......
  • MySQL数据库:Lock wait timeout exceeded; try restarting transaction问题解析及解决方
    MySQL数据库:Lockwaittimeoutexceeded;tryrestartingtransaction问题解析及解决方案一、背景描述二、原因分析三、解决方案3.1方案一事务信息查询3.2方案二如果杀掉线程依然不能解决,可以查找执行线程耗时比较久的任务,kill掉3.3方案三innodb_lock_wait_timeout锁定等......
  • NCHU-软件学院-232019班-23201125-罗伊鑫-第二次Blog
    前言本次Blog总结三次题目集的7-1题目的知识点、题量、难度等情况,以及写完后的错误总结和自我思考。1.知识点三次题目集都对于类的设计的提前规划好有着必要的需求,还有就是对于继承与多态的合理的使用。接着就是对于正则表达式的使用的检测,然后就是要有清晰的逻辑编程表达。2.......
  • iOS 18要来了!苹果预热WWDC24:6月11日凌晨1点见
    苹果最新通过官方公众号向大家发布了WWDC24邀请,将于北京时间6月11日凌晨1点正式开始,号称“猛料加载中”。据了解,本次大会苹果将发布新一代iOS18、iPadOS18、macOS15、tvOS18以及watchOS11、visionOS2操作系统。其中,最受消费者关注的还是iOS18。爆料称,iOS18可能会加入生......
  • CentOS-7.9 安装rabbitmq3.9.11 ,erlang-23.3.4.11
    下载所需rpm包wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.11/erlang-23.3.4.11-1.el7.x86_64.rpmwget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.11/rabbitmq-server-3.9.11-1.el7.noarch.rpm安装Erlangsu......