IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> rest framework框架--分页 -> 正文阅读

[Python知识库]rest framework框架--分页

有三类分页:

  • 看第n页,每页显示多少数据,PageNumberPagination
  • 在某个位置向后查看多少条数据,LimitOffsetPagination
  • 加密分页,只能看上页和下页,会存储当前页的数据库记录的id最大值和id最小值,CursorPagination

对其了解到如何使用就可以了。

PageNumberPagination使用

基本使用

1.settings.py文件中配置每页显示条数

REST_FRAMEWORK = {
    'PAGE_SIZE': 2,
}

2.路由,显示角色的信息
re_path(r'^(?P<version>[v1|v2]+)/roles/pager/$', views.PagerView.as_view(), name='page')
3.视图函数,使用分页器

from rest_framework.pagination import PageNumberPagination
from rest_framework.views import Response
class PagerView(APIView):
    def get(self, request, *args, **kwargs):
        ### 1.获取所有数据
        roles = models.Role.objects.all()
        ### 2.创建分页对象
        pg = PageNumberPagination()
        print(pg)
        ### 3.获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self)
        ### 4.进行序列化
        ser = RolesSerializers(instance=pager_roles, many=True)
        return Response(ser.data)

4.测试
拿到第一页:
在这里插入图片描述
第二页数据
在这里插入图片描述

自定义分页

可以通过request中的参数来调整页面显示的条数和显示的页数。

from rest_framework.pagination import PageNumberPagination
from rest_framework.views import Response
class MyPageNumberPagination(PageNumberPagination):
    # 一页显示多少条数据
    page_size = 3
    # 查看多少页,传入?page=3 看第三页的数据
    page_query_param = "page"
    # 通过request参数来控制一页中显示的条数,如?size=6显示6条
    page_size_query_param = 'size'
    # 一页中显示的最大数据条数,如果?size给定的值太大,此配置就会生效,仅显示6条
    max_page_size = 6

class PagerView(APIView):
    def get(self, request, *args, **kwargs):
        ### 1.获取所有数据
        roles = models.Role.objects.all()
        ### 2.创建分页对象
        pg = MyPageNumberPagination()
        print(pg)
        ### 3.获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self)
        ### 4.进行序列化
        ser = RolesSerializers(instance=pager_roles, many=True)
        return Response(ser.data)

在这里插入图片描述

get_pagirated_response方法

可以获取一个response,给前端返回这个方法的返回值

class PagerView(APIView):
    def get(self, request, *args, **kwargs):
        ### 1.获取所有数据
        roles = models.Role.objects.all()
        ### 2.创建分页对象
        pg = MyPageNumberPagination()
        print(pg)
        ### 3.获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self)
        ### 4.进行序列化
        ser = RolesSerializers(instance=pager_roles, many=True)
        return pg.get_paginated_response(ser.data)

可以看到,前端拿到的返回值中有数据总条数,上一页的链接,下一页的链接。
在这里插入图片描述

LimitOffsetPagination

基本使用

PageNumberPagination一样,条数限制变成了limit(表示取多少条)和offset(表示从哪个位置开始)。

自定义分页

class MyLimitOffsetPagination(LimitOffsetPagination):
    # 默认偏移2个数据,offset默认是0
    default_limit = 2
    # 修改偏移量
    limit_query_param = 'limit'
    # 修改从什么位置开始偏移
    offset_query_param = 'offset'
    # 最大显示条数
    max_limit = 6



class PagerView(APIView):
    def get(self, request, *args, **kwargs):
        ### 1.获取所有数据
        roles = models.Role.objects.all()
        ### 2.创建分页对象
        pg = MyLimitOffsetPagination()
        print(pg)
        ### 3.获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self)
        ### 4.进行序列化
        ser = RolesSerializers(instance=pager_roles, many=True)
        return pg.get_paginated_response(ser.data)

在这里插入图片描述

CursorPagination

自定义分页

class MyCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    # 排序规则
    ordering = 'id'
    # 定制每页显示条数
    page_size_query_param = 'size'
    # 最大显示条数
    max_page_size = 6



class PagerView(APIView):
    def get(self, request, *args, **kwargs):
        ### 1.获取所有数据
        roles = models.Role.objects.all()
        ### 2.创建分页对象
        pg = MyCursorPagination()
        print(pg)
        ### 3.获取分页的数据
        pager_roles = pg.paginate_queryset(queryset=roles, request=request, view=self)
        ### 4.进行序列化
        ser = RolesSerializers(instance=pager_roles, many=True)
        return pg.get_paginated_response(ser.data)

可以观察到,cursor后是加密后的值。只能通过点击返回之中的链接来进行上下页的跳转。
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:27:01  更:2021-10-20 12:28:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:53:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码