django的基于光标的分页

django-cursor-pagination的Python项目详细描述


django光标分页Build Status

django的基于光标的分页系统。而不是指具体的 根据页数,我们根据查询集 排序值。然后我们通过询问记录来询问后续记录 after我们当前拥有的最后一个项目的光标。同样,我们可以要求 在第一个要通过 列表。

与传统分页相比,这种方法有两个主要优点。首先,它 确保在将新数据写入表时,不能移动记录 下一页。其次,查询数据库要快得多 因为我们没有使用很大的偏移值。

与“传统”分页相比,有一些明显的缺点。数据 必须按所有记录中唯一的数据库字段排序。 典型的用例是按创建时间戳和id排序的。 也更难得到数据可能的页面范围。

这个项目的灵感主要来自大卫的this post。 cramer和Relay GraphQL的连接规范。大部分 实现的灵感来自Django rest framework's Cursor pagination.。 DISPS方法和这里使用的方法的主要区别在于 我们要求排序是完全确定的,而不是使用偏移量。

安装

pip install django-cursor-pagination

用法

fromcursor_paginationimportCursorPaginatorfrommyapp.modelsimportPostdefposts_api(request,after=None):qs=Post.objects.all()page_size=10paginator=CursorPaginator(qs,ordering=('-created','-id'))page=paginator.page(first=page_size,after=after)data={'objects':[serialize_page(p)forpinpage],'has_next_page':page.has_next,'last_cursor':paginator.cursor(page[-1])}returndata

使用lastbefore参数可以实现反向分页。 到paginator.page

注意事项

  • 指定的排序必须唯一标识对象。
  • 如果有多个排序字段,则它们都必须具有相同的 方向
  • 不支持sqlite中的多个排序字段,因为它不支持 元组比较。
  • 如果给定了一个游标,但它没有引用有效的对象,则 has_previous(对于after)或has_next(对于before)将始终返回 True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径