django分页器的用法_django分页查询

django分页器的用法_django分页查询前言当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面PageNumberPagination:基础分页器,性能略差LimitOffsetP

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面

  • PageNumberPagination:基础分页器,性能略差
  • LimitOffsetPagination:偏移分页器
  • CursorPagination:游标分页器,性能强大
     

PageNumberPagination

基础分页器PageNumberPagination,数据量越大性能越差。

首先我们在app中创建一个pagination.py文件,然后自定义一个分页器类,继承自PageNumberPagination

from rest_framework.pagination import PageNumberPagination


class MyPageNumberPagination(PageNumberPagination):
    """
    普通分页,数据量越大性能越差
    """
    # 默认页面展示的条数
    page_size = 3
    # 前端访问url需要添加 ?page=页码
    page_query_param = 'page'
    # 用户自定义返回的条数,格式?page_size=页数
    page_size_query_param = "page_size"
    # 用户自定义返回的条数最大限制,数值超过5也只展示5条
    max_page_size = 5

如果我们需要局部配置则在类视图中访问使用pagination_class = MyPageNumberPagination即可
如果是全局配置,则在settings.py文件中配置如下:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'api.pagination.MyPageNumberPagination',
}

之后我们访问url只需在后面加入?page=页码数即可
比如http://127.0.0.1:8000/api/cars/?page=2,代表访问第二页的数据,数据的条数默认为page_size的值
比如http://127.0.0.1:8000/api/cars/?page=2&page_size=5,代表访问第二页的数据,用户自定义返回的条数为5条
 

LimitOffsetPagination

首先我们自定义一个分页器类,继承自LimitOffsetPagination

class MyLimitOffsetPagination(LimitOffsetPagination):
    # url后面跟limit请求参数,
    limit_query_param = 'limit'
    # url后面跟offset请求参数
    offset_query_param = 'offset'
    # 最大限制20条
    max_limit = 20
    # 默认限制3条
    default_limit = 3

之后我们访问url只需要在后面加入?limit=10即可
比如http://127.0.0.1/api/cars/?limit=10代表访问的数据最多展示10条,如果你limit的值>max_limit,那么还是按照max_limit的值来展示数据的条数
比如http://127.0.0.1/api/cars/?offset=1,这里没有limit参数,所以默认展示3条,offset=1代表从数据库列表中提取数据的时候,是从下标1开始提取,比如提取的数据列表是['test1', 'test2', 'test3', 'test4'],本来我们默认提取前3条,但是你加上offset=1后,他是从列表下标为1开始提取,所以最后提取的数据是test2test3test4
 

CursorPagination

游标分页器跟基础分页器用法差不多,只是游标分页的针对下一页数据的url进行了加密
首先我们自定义一个分页器类,继承自CursorPagination

class MyCursorPagination(CursorPagination):
    """
    Cursor 光标分页 性能高,安全
    """
    page_size = 10
    page_size_query_param = "page_size"
    max_page_size = 20
    ordering = '-price'

如果我们视图中使用了排序过滤filter_backends = [OrderingFilter],那么我们在访问url的时候必须携带参数?ordering=需要排序的字段

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164873.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ICMP报文格式解析

    ICMP报文格式解析ICMP报文的格式类型总共分为三大类:1、差错报文2、控制报文3、查询报文上图是ICMP报文的基本格式,上面提到的三种ICMP报文均有“类型,代码和校验和”三个字段,后面还有4个字节是根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。但是ICMP始终有8个字节的头部长度。其中类型字段代表着不同的报文类型,而代码字段指明了某个类型的报文中细分出的该报文的指定的功能。即一个类型的报文拥有着多种功能。同时还需要注意的是ICMP差错报文的数据部分存储的是IP头部和IP头.

    2022年5月5日
    93
  • IntelliJ Platform SDK

    IntelliJ Platform SDKIntelliJPlatformSDK

    2022年6月4日
    41
  • c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]

    c语言的单片机编曲,要的就是强大……C语言编的《最炫民族风》(转)[通俗易懂]该楼层疑似违规已被系统折叠隐藏此楼查看此楼—————————————————————————————————-以下是读入的内容————《最炫民族风》:36,s6,s132s2ss3ss2s1s2s1s6,36,s6,s135s2…

    2022年9月13日
    2
  • 互联网100强公布_互联网排行榜

    互联网100强公布_互联网排行榜无意中翻看到一篇我在三年多前写的文章《我看中国互联网web2.0百强名单》,读来颇有感概。2005-2006那两年,正是WEB2.0概念轰轰烈烈的时候,大大小小的新网站层出不穷,博客、视频、交友、评点、社区、聚合……不管自己的网站的UGC比例多少,都宣传自己是WEB2.0,好像不贴上WEB2.0的标签,就不够潮流,不够IN,就吸引不了用户和风投。WEB2….

    2022年9月27日
    2
  • 固态硬盘开盘数据恢复的方法是_硬盘数据恢复原理

    固态硬盘开盘数据恢复的方法是_硬盘数据恢复原理在电脑的使用中有时因为一些不当的操作会导致固态硬盘损坏,有的网友就在现实中遇到了这种情况,咨询小编固态硬盘开盘数据恢复的方法,下面小编就将怎么恢复固态硬盘数据教给大家。更多一键重装系统的方法在这里工具/原料系统版本:win10教育版品牌型号:华为MateBookXPro方法一、固态硬盘开盘数据恢复的方法1、怎么恢复固态硬盘数据呢,首先可以查看回收站,如果被删除的数据还在回收站里点击还原即可。方法二、固态硬盘开盘数据恢复的方法1、下载安装嗨格式数据恢复大师,在首界面选择恢复模式和文件存储位置,点击扫描,

    2022年9月20日
    3
  • c++关机程序

    c++关机程序//system(“shutdown-s-t10”);//关机system(“cls”);//清屏Sleep()//延时等待这是一个电脑关机程序,但不要无聊尝试,可以在关机是使用HideCursor(); //隐藏光标#include#include<stdio.h>#include<windows.h>#includeintmain(){system(“shutdown-s-t60”);}…

    2022年7月22日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号