【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css3 属性 backface-visibility 的实践应用

backface-visibility 是一个用于控制元素在面对屏幕不同方向时的可见性的CSS3特性。它有两个可能的值&#xff1a; visible&#xff1a;当元素不面向屏幕&#xff08;即背面朝向用户&#xff09;时&#xff0c;元素的内容是可以被看到的。hidden&#xff1a;当元素不面向屏幕…

使用融合CDN同时提升网站效能及安全性

现在许多企业的服务都依靠网站营运&#xff0c;维持稳定的网站效能及安全性变得相当重要。事实上&#xff0c;当网站载入时间超过 3 秒钟&#xff0c;超过 40% 的使用者会直接跳出&#xff0c;由此可见网站效能的重要性&#xff1b;而当网站受到 DDoS 攻击时&#xff0c;处理起…

经典mysql实操和行专列操作

1.删除除了学号字段以外&#xff0c;其它字段都相同的冗余记录&#xff0c;只保留一条&#xff01;&#xff08;也就是要删除王五和赵六中一条重复数据只留一条&#xff09; 要求的预期效果: 原始数据创建表结构&#xff1a; CREATE TABLE tb_student (id int(16) NOT NULL,na…

单细胞scATAC-seq测序基础知识笔记

单细胞scATAC-seq测序基础知识笔记 单细胞ATAC测序前言scATAC-seq数据怎么得出的&#xff1f; 该笔记来源于 Costa Lab - Bioinformatics Course 另一篇关于scRNA-seq的请移步 单细胞ATAC测序前言 因为我的最终目的是scATAC-seq的数据&#xff0c;所以这部分只是分享下我刚学…

【代码随想录-链表】环形链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

C++——虚函数

C——虚函数 virtual关键字 在C中&#xff0c; virtual 和 override 关键字用于支持多态&#xff0c;尤其是在涉及类继承和方法重写的情况下。正确地理解和使用这两个关键字对于编写可维护和易于理解的面向对象代码至关重要。 virtual关键字 1.使用场景&#xff1a;在基类中…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…

Linux进程信号处理:深入理解与应用(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;its 6pm but I miss u already.—bbbluelee 0:01━━━━━━️&#x1f49f;──────── 3:18 &#x1f504; ◀️…

关于破解IDEA后启动闪退的问题

问题描述&#xff1a;2023.1启动不了&#xff0c;双击桌面图标&#xff0c;没有响应。 解决办法&#xff1a; 打开C:\Users\c\AppData\Roaming\JetBrains\IntelliJIdea2023.1\idea64.exe.vmoptions 这个文件。 内容如下所示&#xff1a; 删除红框的数据以后&#xff0c;再登录…

基于springboot校园二手书交易管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括乐校园二手书交易管理系统的网络应用&#xff0c;在外国二手书交易管理系统已经是很普遍的方式&#xff0c;不过国内的管理系统可能还处于起步阶段。乐校园二手书交易管理系统…

【Spring连载】使用Spring Data访问Redis(十四)----Redis Repositories

【Spring连载】使用Spring Data访问Redis&#xff08;十四&#xff09;----Redis Repositories 一、Core concepts二、Defining Repository Interfaces三、Creating Repository Instances四、Usage五、Object Mapping Fundamentals六、对象到Hash映射Object-to-Hash Mapping七、…

JC/T 2569-2020 建筑门窗用木型材检测

木型材指使用天然木材或以天然木材为基材加工成的指接材、集成材、重组木等为原料&#xff0c;沿纤维方向加工出一定尺寸槽口的们穿框扇杆件。 JC/T 2569-2020建筑门窗用木型材检测: 检测项目 测试方法 外观 JC/T 2569 尺寸 JC/T 2569 剪切强度 GB/T 26899 剥离率 GB…

搜狗开源框架Workflow网络模型分析

workflow是一个比较轻量化的后端服务框架&#xff0c;支持Linux/Mac/Windows主流平台&#xff0c;其网络模块是框架的核心。在workflow-windows分支上可以看到对windows的IOCP的封装&#xff0c;对于学习windows IOCP网络编程有很好的启发意义。因此&#xff0c;有必要对该网络…

2024-02-01(Hive)

1.我们通过忘Hive中执行SQL语句&#xff0c;Hive会帮我们将SQL语句翻译成MapReduce在底层去做分布式的计算。 2.Hive看似处理的是mysql的表&#xff0c;但实际上处理的是HDFS中的文本文件。 3.Hive中创建的库和表的数据&#xff0c;存储在HDFS中&#xff0c;默认存放在&#…

类银河恶魔城学习记录1-1 Player状态机的搭建 P28上

对状态机的介绍 什么是状态机&#xff1f;一篇文章就够了 - 知乎 说实话&#xff0c;目前并不能深入理解状态机的奇妙之处&#xff08;当然&#xff0c;我觉得状态机作为教程的重要组成部分是不得不理解的&#xff0c;所以以下我会对游戏教程内的状态机做一些我认为的解释&am…

加速知识检索:伯克利DeepMind联合研究,RaLMSpec让语言模型服务飞速提升2-7倍!

近年来&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;在多样化的 NLP 任务上取得了令人瞩目的成果。然而&#xff0c;知识密集型任务仍是 NLP 领域中的一项挑战&#xff0c;因为这些任务不仅要求模型要理解和生成自然语言&#xff0c;还要能够访问…

Tomcat在Java web的应用

Tomcat在Java web的应用 本来这篇博客顺应之前的内容&#xff0c;应该是需要写Tomcat的简介、基本使用、配置和部署项目、Web的项目结构、创建MavenWeb、idea本地集成以及Tomcat的Maven插件的笔记内容&#xff0c;但是总觉得没必要&#xff0c;因为这些内容网上肯定很多了&…

移动机器人激光SLAM导航(四):GMapping SLAM 篇

参考引用 GMapping ROS-Wiki从零开始搭二维激光SLAMGMapping 漫谈小白学移动机器人机器人工匠阿杰wpr_simulation 移动机器人激光SLAM导航&#xff08;文章链接汇总&#xff09; 1. GMapping 1.1 FastSLAM 问题分解 概率论相关公式 1. 条件概率公式&#xff1a; p ( x , y ) …

C语言的基础学习

C语言的变量 ## C语言中的变量 在C语言中,变量是对程序中数据所占内存空间的一种抽象定义。定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置 [❷](https://www.dotcpp.com/cour…

将链表反转

反转链表在解决需要从尾节点开始遍历到头节点的地方很实用&#xff0c;是一种常用的解题技巧。在反转时&#xff0c;我们可以考虑从前向后反转和从后向前反转两种方式。 法一&#xff1a;递归 每次将链表的头节点的下一个节点作为新的头节点&#xff0c;然后对剩余部分调用递归…