【Django学习】(十二)GenericAPIView_过滤_排序_分页(下)

简介: 【Django学习】(十二)GenericAPIView_过滤_排序_分页(下)

三、分页

1、使用rest_framework中的分页引擎

全局配置文件中指定分页引擎DEFAULT_PAGINATION_CLASS,并且指定每页数据数量参数PAGE_SIZE;

'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 3,
# 查询全部数据
    def get(self, request):
        qs = self.get_queryset()
        qs=self.filter_queryset(qs)
        #需要调用paginate_queryset方法,需要传递序列化之后的字典或者嵌套字典的列表
        page_queryset=self.paginate_queryset(qs)
        #如果定义了分页引擎,则使用get_paginated_response进行返回,否则默认返回不分页的全部数据
        if page_queryset is not None:
            serializer_obj = self.get_serializer(instance=page_queryset, many=True)
            return self.get_paginated_response(serializer_obj.data)
        serializer_obj = self.get_serializer(instance=page_queryset, many=True)
        return Response(serializer_obj.data, status=status.HTTP_200_OK)
  • 调用paginate_queryset方法,需要传递查询集对象
  • 需要调用get_paginated_response方法,需要传递序列化之后的字典或者嵌套字典的列表
  • 如果定义了分页引擎,则使用get_paginated_response进行返回,否则默认返回不分页的全部数
  • get_paginated_response返回Response对象,在返回的数据中,添加了特定的数据

count :数据的总数量

next :下一页的链接link

previous :上一页的链接link

results :查询结果data

2、自定义分页引擎类

2.1 自定义一个分页引擎类

from rest_framework.pagination import PageNumberPagination as _PageNumberPagination
class PageNumberPagination(_PageNumberPagination):
    # 分页关键字,来查看对应页的数据
    page_query_param='p'
    # 每页指定展示多少条数据
    page_size_query_param='s'
    # 设置每页数据量虽大值
    max_page_size=20
    # 无效页面提示信息
    invalid_page_message='这是个无效页面,请检查后重新输入....'

2.2 然后再全局配置文件setting.py里替换掉自己定义的分页类

'DEFAULT_PAGINATION_CLASS':'utils.pagination.PageNumberPagination',
    'PAGE_SIZE': 3,

接下来url里拼接上p=2&s=1,表示展示第二页,每页展示1条数据

当输入的页数不存在时,就会抛出自定义的无效分页的描述

3、给指定的类视图定制一个分页引擎

就需要在指定的类视图中引用我们自定义的分页引擎

3.1 导入自定义分页引擎类

from utils.pagination import PageNumberPagination

3.2 声明需要使用的分页引擎

pagination_class = PageNumberPagination

如果我们还是按照全局分页引擎来分页,是无效的

如果我们按照自定义的分页引擎来分页,是有效的

相关文章
|
6月前
|
JavaScript 数据库 Python
django实现增删改查分页接口
django实现增删改查分页接口
|
1月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
37 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
1月前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
16 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
5月前
|
编解码 前端开发 JavaScript
技术经验分享:Django学习日记
技术经验分享:Django学习日记
|
3月前
|
前端开发 关系型数据库 Python
Django入门到放弃之分页器
Django入门到放弃之分页器
|
3月前
|
安全 中间件 项目管理
Django 后端架构开发:分页器到中间件开发
Django 后端架构开发:分页器到中间件开发
42 1
|
5月前
|
JSON 搜索推荐 数据库
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
|
5月前
|
前端开发 数据管理 API
Django REST framework中GenericAPIView与混入扩展类详解
Django REST framework中GenericAPIView与混入扩展类详解
|
5月前
|
数据安全/隐私保护 Python
必知的技术知识:django自定义分页器
必知的技术知识:django自定义分页器