【愚公系列】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

相关文章
|
17天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
60 6
|
17天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
103 45
|
11天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
46 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
18天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
40 4
|
18天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
30 2
|
9天前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
27 0
|
17天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
28 0
|
人工智能 前端开发 Python
Python:Python技巧之80个经典题——课程笔记(五)
Python:Python技巧之80个经典题——课程笔记
|
C语言 Python
Python:Python技巧之80个经典题——课程笔记(三)
Python:Python技巧之80个经典题——课程笔记
Python:Python技巧之80个经典题——课程笔记(一)
Python:Python技巧之80个经典题——课程笔记(一)