【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页

简介: 【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页

一、分页

REST 框架包括对可自定义分页样式的支持。这允许您修改将大型结果集拆分为各个数据页的方式。


分页 API 可以支持以下任一功能:


作为响应内容的一部分提供的分页链接。

响应标头中包含的分页链接。

内置样式目前都使用作为响应内容的一部分包含的链接。使用可浏览 API 时,此样式更易于访问。


仅当您使用通用视图或视图集时,才会自动执行分页。如果您使用的是常规 ,则需要自己调用分页 API,以确保返回分页响应。有关示例,请参阅 和 类的源代码。


可以通过将分页类设置为 来关闭分页。


1.全局设置分页

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 100
}

请注意,您需要设置分页类和应使用的页面大小。默认情况下,两者都是 。


您还可以使用该属性在单个视图上设置分页类。通常,您需要在整个 API 中使用相同的分页样式,但您可能希望根据每个视图改变分页的各个方面,例如默认或最大页面大小。


二、PageNumberPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。PageNumberPagination


django_paginator_class- 要使用的 Django 分页器类。默认值为

,对于大多数用例来说应该没问题。django.core.paginator.Paginator

page_size- 指示页面大小的数值。如果设置,这将覆盖该设置。默认为与设置键相同的值。PAGE_SIZEPAGE_SIZE

page_query_param- 一个字符串值,指示要用于分页控件的查询参数的名称。

page_size_query_param-

如果设置,这是一个字符串值,指示查询参数的名称,该参数允许客户端基于每个请求设置页面大小。缺省为

,表示客户端可能无法控制请求的页面大小。None

max_page_size-

如果设置,这是一个数值,指示允许的最大请求页面大小。仅当同时设置此属性时,此属性才有效。page_size_query_param

last_page_strings- 字符串值的列表或元组,指示可与

请求集合中最后一页一起使用的值。默认为page_query_param(‘last’,)

template- 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML

分页控件。缺省值为 。None"rest_framework/pagination/numbers.html"

三、LimitOffsetPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。LimitOffsetPagination


default_limit- 一个数值,指示客户端未在查询参数中提供限制时要使用的限制。默认为与设置键相同的值。PAGE_SIZE

limit_query_param- 指示“限制”查询参数名称的字符串值。缺省值为 。‘limit’

offset_query_param- 指示“offset”查询参数名称的字符串值。缺省值为 。‘offset’

max_limit- 如果设置,这是一个数值,指示客户端可能请求的最大允许限制。缺省值为 。None

template- 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML

分页控件。缺省值为 。None"rest_framework/pagination/numbers.html"

四、CursorPagination

1.属性说明

若要设置这些属性,应重写该类,然后启用自定义分页类,如上所述。CursorPagination


page_size= 指示页面大小的数值。如果设置,这将覆盖该设置。默认为与设置键相同的值。PAGE_SIZEPAGE_SIZE

cursor_query_param= 指示“游标”查询参数名称的字符串值。缺省值为 。‘cursor’

ordering= 这应该是一个字符串或字符串列表,指示将对其应用基于游标的分页的字段。例如:。缺省值为

。此值也可能通过在视图上使用来覆盖。ordering = ‘slug’-createdOrderingFilter

template= 在可浏览 API 中呈现分页控件时要使用的模板的名称。可以重写以修改呈现样式,或设置为完全禁用 HTML

分页控件。缺省值为 。None"rest_framework/pagination/previous_and_next.html"

五、自定义设置分页

1.自定义

自定义分页


class LargeResultsSetPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000
class StandardResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = 'page_size'
    max_page_size = 1000

自定义分页返回格式


class CustomPagination(pagination.PageNumberPagination):
    def get_paginated_response(self, data):
        return Response({
            'links': {
                'next': self.get_next_link(),
                'previous': self.get_previous_link()
            },
            'count': self.page.paginator.count,
            'results': data
        })

image.png


1.视图应用分页

class BillingRecordsView(generics.ListAPIView):
    queryset = Billing.objects.all()
    serializer_class = BillingRecordsSerializer
    pagination_class = LargeResultsSetPagination

2.全局应用分页

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'apps.core.pagination.StandardResultsSetPagination'
}

总结

下图为基本使用案例:


PageNumberPagination使用

image.png

LimitOffsetPagination使用

image.png

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
314 1
|
2月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
250 0
|
2月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
403 0
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
163 0
|
3月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
3月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
150 0
|
人工智能 前端开发 Python
Python:Python技巧之80个经典题——课程笔记(五)
Python:Python技巧之80个经典题——课程笔记
|
C语言 Python
Python:Python技巧之80个经典题——课程笔记(三)
Python:Python技巧之80个经典题——课程笔记
Python:Python技巧之80个经典题——课程笔记(一)
Python:Python技巧之80个经典题——课程笔记(一)
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
293 102

推荐镜像

更多