dif分页、排序、过滤功能

news/2024/5/15 23:22:38/文章来源:https://blog.csdn.net/weixin_52596593/article/details/127250783

分页功能

        接口中只有查询全部数据接口有时候数据量非常大,所以需要用到分页功能,在rest_framework中提供了三种分页的方法

一.PageNumberPagination

第一步:定义一个分页类继承PageNumberPagination

from rest_framework.pagination import PageNumberPaginationclass CsPageNumberPagination(PageNumberPagination):page_size = 5 # 每页显示的条数page_query_param = 'page' # 查询第几页的参数page_size_query_param = 'size' # 查询页显示的条数max_page_size = 10 # 限制通过size查询最大的条数

第二步:在前端访问形式

GET  http://127.0.0.1:8000/books/?page=2
# 显示第二页数据
GET  http://127.0.0.1:8000/books/?page=2&size=4
# 查询第二页每页显示4条

\bullet  分页类PageNumberPagination中定义参数

        page_size:每页显示的条数

        page_query_param:前端发送的页数关键字名,默认为"page"

        page_size_query_param:前端发送的页数数目关键字名,默认为None

        max_page_size:限制通过size查询每页最大的条数

二.LimitOffsetPagination

第一步:定义一个分页类继承LimitOffsetPagination

from rest_framework.pagination import LimitOffsetPaginationclass CsLimitOffsetPagination(LimitOffsetPagination):default_limit = 2 # 每页显示的条数limit_query_param = 'limit # 这一页显示数据数offset_query_param = 'offset' # 从第几条开始取几条max_limit = 5 # 限制最多显示条数

第二步:在前端访问形式

GET  http://127.0.0.1:8000/books/?limit=4
# 这一页显示4条数据
GET  http://127.0.0.1:8000/books/?offset=3&limit=4
# 从第三条开始取四条数据

\bullet  分页类LimitOffsetPagination中定义参数

        default_limit:每页显示的条数

        limit_query_param:limit参数名,默认为"limit"

        offset_query_param:offset参数名,默认为'offset'

        max_limit:限制最大显示的条数

三.CursorPagination

第一步:定义一个分页类继承CursorPagination

from rest_framework.pagination import CursorPaginationclass CsCursorPagination(CursorPagination): 
# 只能上一页和下一页,它的分页效率是最高的,高于上面所有的分页方式,大数据量的分页,建议使用这种cursor_query_param = 'cursor'page_size = 3  #每页显示条数ordering = 'id'  # 排序,必须是表中得字段

第二步:在前端访问形式

GET http://127.0.0.1/four/books/                 # 首页,第一页
GET http://127.0.0.1/four/books/?cursor=cD03     # 点击上一页  or  上一页自动生成的

四.在视图类中使用

三种不同的分类方式在视图类中只有继承了GenericAPIView才能使用,如果继承APIView需要自己写

from .pagination import CsPageNumberPagination, CsLimitOffsetPagination, CsCursorPagination
# 必须继承GenericAPIView才有这个类属性
class BookView(ViewSetMixin, ListAPIView, CreateModelMixin):# pagination_class字段选择分页类pagination_class = CsPageNumberPagination、CsLimitOffsetPagination、CsCursorPaginationqueryset = Book.objects.all()serializer_class = BookSerializer

排序功能

        只有查询所有数据的接口需要涉及到排序,其它接口不需要,且必须继承了GenericAPIView+ListModelMixin的视图类上使用

\bullet  在视图类中进行配置

from rest_framework.filters import OrderingFilter class BookView(ViewSetMixin, ListAPIView, CreateModelMixin):queryset = Book.objects.all()serializer_class = BookSerializer# 排序类的配置filter_backends=[OrderingFilter,]# 指定按id、price字段排序ordering_fields=['id','price']

\bullet  前端访问形式

GET http://127.0.0.1:8000/books/?ordering=price,id
# 先按价格的升序排,如果价格一样再按id的升序排
GET http://127.0.0.1:8000/books/?ordering=-price,-id
# 先按价格的降序排,如果价格一样再按id的降序排

ps:分页和排序能一起用,但是先排序再分页

过滤功能

        过滤和分页、排序功能一样都是查询所有数据才需要涉及到,其它接口都不需要,restful规范中有一条请求地址中带过滤条件:分页、排序、过滤统称为过滤所以都可以在请求中带条件

\bullet  在视图类中进行配置

         过滤和排序一样都在rest_framework.filters中

from rest_framework.filters import SearchFilter
class BookView(ViewSetMixin, ListAPIView, CreateModelMixin):queryset = Book.objects.all()serializer_class = BookSerializer# 指定过滤类filter_backends=[SearchFilter,]# 指定过滤字段search_fields=['name','publish']

\bullet  前端访问形式

GET http://127.0.0.1:8000/books/?search=我
# 只要name或publish中带有我就都能过滤出来

ps:内置过滤类只能通过search写条件,如果配置了多个过滤字段则条件间是或者关系 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_398694.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day02 -尚品汇-路由传递参数

围绕这个开展 1》在Header.vue里面 2》在Header.vue里面 第一种方式:(字符串形式写法) 传递params参数 3》在index.js里面 【此处用的是params参数 需要占位】 4》在Header.vue里面 【params写法】 1--4的效果图 我还想加一个传…

NTFS文件系统详解(二)MBR\EBR基本信息

NTFS文件系统详解(二)MBR\EBR基本信息一、MBR结构分析1. 第一个分区表项2. 第二个分区表项3. 第三个分区表项4. 第四个分区表项二、EBR结构分析1. 第一个分区表项2. 第二个分区表项2.1 第一个分区表项2.2 第二个分区表项2.3 第三个分区表项系列文章目录经…

springBoot实验填报系统

摘要 国内教育行业的快速发展,人们为了能够更加方便地管理学生实验填报,实验填报系统被人们开发出来从而更好地方便管理学生实验填报,一个完美的实验填报系统已经成为各个学校的追求目标。 本系统利用SpringBoot技术进行开发实验填报系统是未…

asp.net旅游网站系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 ASP.NET 旅游网站系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net旅游网站系统VS开发sqlserver数…

git基本使用方式整理

文章目录A:配置个人信息B:创建目录C:初始化仓库D:往仓库添加和提交文件E:状态查看命令F:版本回退G:对git占存区的理解H:管理修改I:撤销修改J:删除文件K:关联远程仓库L:仓库克隆在Git安装完成之后,需要配置Git连接的用户信息&#…

python与Electron联合编程记录之八(Hello Flask!)

Hello Flask! 既然知道了Electron和Flask信息交换的原理,我们就可以开始进行Electron和Flask的联合编程了。   让我们紧接第三部分“Hello,Electron!”项目继续探索Flask的用法。 1、配置虚拟环境 由于Flask是python编写的,所以…

Python百日进阶-WEB开发】Day156 - 前端基础 之 BootStrap(一)

文章目录一、BootStrap的安装和使用1.1 BootStrap介绍1.2 BootStrap特点1.3 下载使用1.3.1 下载BootStrap:1.3.2 下载 jquery.js1.4 创建项目1.5 bootstrap和vue对比1.5.1 Bootstrap和vue不是一个层级的东西,Vue是框架,bootstrap是基于jQuery的组建库。1…

洛谷 T281315 掌控

PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 T281315 掌控 题目 题目描述 公元 2044 年,人类进入了宇宙纪元。L 国有 nnn 个星球,分别编号为 111 到 nnn ,每一星球上有一个球长。有些球长十分强大…

Ryu的安装+使用

ryu的安装 安装RYU,需要安装一些python的套件: python-eventlet python-routes python-webob python-paramiko 安装RYU主要有两种方式: 1、pip安装 pip install ryu git clone https://github.com/osrg/ryu.git cd ryu sudo pip install -…

【路径规划】基于matlab卡尔曼滤波、三次插值极速赛道赛车路径规划【含Matlab源码 2158期】

一、卡尔曼滤波路径追踪优化简介 割草机器人通过比对当前t时刻位置、导航方程之间偏移角度θ和偏移距离d,确定t1时刻的运动方向属于递推型路径追踪。割草机器人工作过程中受到地面起伏等环境因素影响,在采用上述追踪方法时会和预测值产生偏差,造成机器人偏离导航方程,称之为系…

数据大放送之HMA

一、前言 今天给大家带来的是空间分辨率为8米的DEM数据,可能有小伙伴会疑惑,是不是需要付费? 不用、不用、不用,完全免费。 也就是我们的HMA数据,全称NSIDC DAAC High Mountain Asia,也叫高山亚洲数据集…

Java:JSP是什么?Jakarta服务器页面介绍

Jakarta Server Pages(以前称为 JavaServer Pages)是一种 Java 标准技术,开发人员使用它来为 Java Web 应用程序编写动态的、数据驱动的网页。JSP 建立在 Java Servlet(又名 Jakarta Servlet)规范之上,是 Jakarta EE 中包含的用于持续支持和升级的 Java …

JPA的学习

JPA jpa详解 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Spring Date整合jpa Spring Date pring Data是Spring的一个子项目…

超详细Redis入门教程!

一、引言 为啥需要redis?没有reids有啥问题?↓ 1.1 数据库压力过大 由于用户量增大,请求数量也随之增大,数据压力过大 1.2 数据不同步 多台服务器之间,数据不同步 1.3 传统锁失效 多台服务器之间的锁,已经不存在互斥性了 redis如…

(附源码)计算机毕业设计SSM志愿者服务平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

ArcGIS基础:要素转点、要素折点转点与面转线

1、【面、线转点】: 实验所用数据如下:点、线、面分别为: 可以使用【要素转点】工具,工具位于【要素】下,点击之后弹出【要素转点】对话框,只有一点需要注意:【内部】,右侧方框有…

k8s 部署minio

k8s 部署minio 部署NFS mkdir /nfs_data/minio_data chmod -R 777 /nfs_data/minio_data创建命名空间minio kubectl create ns minioDeployment apiVersion: apps/v1 kind: Deployment metadata:name: minionamespace: minio spec:replicas: 1selector:matchLabels:app: miniot…

100 年前有个人竟然敢劝人们定投……

有这么个人,名字叫约翰拉什科布(John J. Raskob)。 只说名字,估计你也不知道他是谁。(虽然 400 多天之前写过一次关于他的文章,但,估计还是有很多人根本就没看到……)就算你身在中国,压根就没机会去纽约亲眼看到帝国大厦,估计你也曾经见过这张照片……拉什科布在通用…

实验4:开源控制器实践——OpenDayligh

一、实验目的能够独立完成OpenDaylight控制器的安装配置; 能够使用Postman工具调用OpenDaylight API接口下发流表。二、实验环境 Ubuntu 20.04 Desktop amd64 三、实验要求 (一)基本要求利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight控制器;打开OpenDaylight控…

numpy快速处理数据学习笔记

numpy快速处理数据 《python编程基础及应用》 陈波 文章目录numpy快速处理数据一、多维数组二、数组的快速生成(一)、等差数列(二)、等比数列(三)、数组生成函数(四)、fromfunction()三、一维数…