【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

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

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

相关文章
|
4月前
|
JavaScript 数据库 Python
django实现增删改查分页接口
django实现增删改查分页接口
|
8月前
|
存储 缓存 数据库
Django框架学习(四)
Django框架学习(四)
|
8月前
|
前端开发 关系型数据库 MySQL
Django框架学习(三)
Django框架学习(三)
|
8月前
|
JSON 前端开发 数据库
Django框架学习(一)
Django框架学习(一)
|
5月前
|
调度 Apache 数据库
Django 学习教程-第一个 Django 应用
本章主要讲述了如何创建一个Django项目,以一个投票案例程序介绍了Django的请求和响应流程。
51 1
|
5月前
|
Python
Django 学习教程-介绍与安装
本章介绍了Django是什么,以及为什么使用Django和安装Django
40 1
Django 学习教程-介绍与安装
|
6月前
|
前端开发 数据库 网络架构
Python Django框架中文教程:学习简单、灵活、高效的Web应用程序框架
Python Django框架中文教程:学习简单、灵活、高效的Web应用程序框架
|
6月前
|
Python
28 Django高级- 分页
28 Django高级- 分页
18 0
|
8月前
|
存储 NoSQL 中间件
Django框架学习(二)
Django框架学习(二)
|
8月前
|
关系型数据库 MySQL 数据库
基于 Python Django 的在线编程学习平台(仿慕课网)
基于 Python Django 的在线编程学习平台(仿慕课网)