gpt4 book ai didi

python - Django Rest Framework 自 ID 以来的分页

转载 作者:太空狗 更新时间:2023-10-30 01:01:30 25 4
gpt4 key购买 nike

我已经使用 Django Rest Framework 构建了一个 API。我想更改分页以获得更好的用户体验。

问题:

客户端调用请求所有帖子。请求看起来像:

http://website.com/api/v1/posts/?page=1

这将返回帖子的第一页。但是,总是会创建新帖子。所以当用户请求时:

http://website.com/api/v1/posts/?page=2

帖子几乎总是与第 1 页相同(因为新数据总是进来,我们按 -created 排序)。

可能的解决方案?

我的想法是随请求一起发送一个对象 ID,以便我们抓取帖子时。我们根据最后一个查询获取它们。

http://website.com/api/v1/posts/?page=2&post_id=12345

当我们分页时,我们会过滤 post_id < 12345 的位置

但这只在我们的 post_id 是整数的情况下有效。

现在我只使用基本的 ListAPIView

class PostList(generics.ListAPIView):
"""
API endpoint that allows posts to be viewed
"""
serializer_class = serializers.PostSerializer # just a basic serializer
model = Post

有没有更好的分页方式?因此,在创建新数据时,该用户 session 的下一个请求看起来不像是第一个请求。

最佳答案

您正在寻找 CursorPagination ,来自 DRF 文档:

Cursor Pagination provides the following benefits:

  • Provides a consistent pagination view. When used properly CursorPagination ensures that the client will never see the same item twice when paging through records, even when new items are being inserted by other clients during the pagination process.
  • Supports usage with very large datasets. With extremely large datasets pagination using offset-based pagination styles may become inefficient or unusable. Cursor based pagination schemes instead have fixed-time properties, and do not slow down as the dataset size increases.

您也可以使用 -created 作为排序字段,如上所述。

关于python - Django Rest Framework 自 ID 以来的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com