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知识库 -> Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器 -> 正文阅读

[Python知识库]Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器

Django drf 分页查询(批量查询)

REST framework提供了分页的支持
我们可以在配置文件中设置全局的分页方式,如:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100  # 每页数目
}

也可单独为视图添加不同分页行为。在视图中通过pagination_clas属性来指明

class AssetsViewSet(ModelViewSet):
    queryset = AssetsModel.objects.all()
    permission_classes = [AllowAny]
    pagination_class = LimitOffsetPagination
    ...

也可通过自定义Pagination类,来为视图添加不同分页行为:

class LargeResultsSetPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000
class BookDetailView(RetrieveAPIView):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    pagination_class = LargeResultsSetPagination

注意:如果在视图内关闭分页功能,只需在视图内设置

pagination_class = None

PageNumberPagination:普通分页

前端访问网址形式:

GET  http://127.0.0.1:8000/student/?page=4

使用比较常见,前端会显示出,现在总共多少页。

Django 自定义分页器

可以在子类中定义的属性:

page_size – 每页数目
page_query_param – 前端发送的页数关键字名,默认为”page”
page_size_query_param – 前端发送的每页数目关键字名,默认为None
max_page_size – 前端最多能设置的每页数量

from rest_framework.pagination import PageNumberPagination

class MyPageNumberPagination(PageNumberPagination):
    page_size = 3  # 每页显示3条数据
    page_query_param = 'page'  # 查询参数
    page_size_query_description = 'size'
    max_page_size = 5  # 最大每页显示五条数据

如上代码
前端请求路径:

/api/v1/asset?batch=1&batch_size=5

返回结果:

{
    "count": 4,
    "next": "http://127.0.0.1:8001/api/v1/asset/?batch=2&batch_size=5",
    "previous": null,
    "results": [
        {
            "id": 6,
            "asset_id": "773",
            "asset_type": " asset_type",
            "asset_name": "aaaaa",
            "mgmt_ip": "1.13.1.1",
            "protocol": "bbbbb",
            "tenant_id": "ggggggggg",
            "description": "sssssss"
        },
        {
            "id": 7,
            "asset_id": "494",
            "asset_type": " asset_type",
            "asset_name": "aaaaa",
            "mgmt_ip": "1.13.1.1",
            "protocol": "bbbbb",
            "tenant_id": "ggggggggg",
            "description": "sssssss"
        },
        {
            "id": 8,
            "asset_id": "171",
            "asset_type": " asset_type",
            "asset_name": "cccccccccccc",
            "mgmt_ip": "1.13.1.1",
            "protocol": "bbbbb",
            "tenant_id": "ggggggggg",
            "description": "sssssss"
        }
    ]
}

如上,是我们不复写 def list的自动返回。
如果我要自定义批量查询的返回结构呢?

自定义批量查询的返回结构

Django Rest framework 分页的使用
参考URL: https://blog.csdn.net/weixin_43603327/article/details/839615

比如,这里我想删掉 count、next、previous 字段,返回格式改成:

{
  "status_code":200,
  "data": {
“result”: [
  {
  ...
  }

思路: 复写 def list方法,在里面操作获取数据,组装返回给前端的结构。 推荐阅读本标题下参考URL。

#自定义分页类
class MyPageNumberPagination(PageNumberPagination):
    #每页显示多少个
    page_size = 3
    #默认每页显示3个,可以通过传入pager1/?page=2&size=4,改变默认每页显示的个数
    page_size_query_param = "size"
    #最大页数不超过10
    max_page_size = 10
    #获取页码数的
    page_query_param = "page"


class Pager1View(APIView):
    def get(self,request,*args,**kwargs):
        #获取所有数据
        roles = models.Role.objects.all()
        #创建分页对象,这里是自定义的MyPageNumberPagination
        pg = MyPageNumberPagination()
        #获取分页的数据
        page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
        #对数据进行序列化
        ser = PagerSerialiser(instance=page_roles,many=True)
        return Response({"status_code": 200, 'data': {'result':ser.data}})

LimitOffsetPagination:偏移分页

前端访问网址形式:

GET http://127.0.0.1/four/student/?limit=100&offset=400

这是veiw层,添加:

    pagination_class = LimitOffsetPagination

CursorPagination:游标分页 – 速度快,但不能指定查询

Django-drf-内置分页器的使用
参考URL: https://zhuanlan.zhihu.com/p/286671626

参考

Django-drf-内置分页器的使用
参考URL: https://zhuanlan.zhihu.com/p/286671626
Django Rest framework 分页的使用
参考URL: https://blog.csdn.net/weixin_43603327/article/details/83961568

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:36:34  更:2021-12-09 11:38:36 
 
开发: 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/16 4:47:14-

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