【Django-ninja】分页管理器

2024-02-02 19:36
文章标签 django 分页 管理器 ninja

本文主要是介绍【Django-ninja】分页管理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

django ninja通过@paginate装饰器即可进行分页。内置了两个分页管理器LimitOffsetPagination和PageNumberPagination,能够实现基本的分页要求。当内置分页器不满足要求时,可以继承PaginationBase进行扩展自己的分页管理器。 

1 使用分页器

from ninja.pagination import paginate@api.get('/users', response=List[UserSchema])
@paginate
def list_users(request):return User.objects.all()

/api/users?limit=10&offset=0

返回:

{
"items": [],
"count": 10
}

2 ninja自带分页器

2.1 LimitOffsetPagination

默认paginate使用的就是该分页器。

2.2 PageNumberPagination

@api.get("/users")
@paginate(PageNumberPagination, page_size=50)
def list_users(...

返回结果包含items和count

{
"items": [],
"count": 10
}

2.3 自定义分页器

这个自定义分页器定义了Input、Output、paginate_queryset。

实现了page和page_size参数获取数据。page_size可以通过多种方式进行调节。在定义接口的时候设置固定值,或者使用分页器的默认值,或者使用用户的传输参数。

返回结果,新增多个字段,修改默认items为data。

#!/usr/bin/env python
# coding=utf-8
# @Time    : 2024/2/2 15:40
# @Software: PyCharm
import math
from ninja import Schema
from ninja.pagination import PaginationBase
from typing import List, Any, Optionalclass CustomPagination(PaginationBase):def __init__(self, page_size: Optional[int] = None, **kwargs):""" 如果指定具体值,那么用户参数中的page_size将会失效。page_size: 在定义接口是可以设置的每页记录数。例如:@api.get("/book")@paginate(CustomPagination)def book_list(request):return Book.objects.all()@api.get("/book")@paginate(CustomPagination, page_size=10)  # 定义接口默认每页数量def book_list(request):return Book.objects.all()"""self.page_size = page_sizesuper().__init__(**kwargs)class Input(Schema):""" 输入参数,两个参数。1. page(必须2. page_size(可选)"""page: intpage_size: int = 5class Output(Schema):"""输出结果。1. data 数据集合2. total:总记录数3. per_page:每页记录数4. total_page:总页数5. page:当前页"""data: List[Any]  # <--- datatotal: intper_page: inttotal_page: intpage: intdef paginate_queryset(self, queryset, pagination: Input, **params):page = pagination.pagepage_size = self.page_size or pagination.page_sizestart_idx = (page - 1) * page_sizeend_idx = start_idx + page_sizetotal_count = queryset.count()return {'data': queryset[start_idx: end_idx],  # <--- data'total': total_count,'per_page': page_size,'total_page': math.ceil(total_count / page_size),'page': page}items_attribute: str = "data"  # <--- 将默认数据集合的名称从items修改成data

这篇关于【Django-ninja】分页管理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671742

相关文章

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

mybatis-plus分页无效问题解决

《mybatis-plus分页无效问题解决》本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可... 昨天在做一www.chinasem.cn个新项目使用myBATis-plus分页一直失败,后来经过多方

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建