随笔 - 18  文章 - 3 评论 - 0 阅读 - 977
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

DRF提供了3个分页器,apiView和GenericView的用法是不一样的,具体使用方式如下,

1.PageNumberPagination

基于GenericAPIView实现的排序

复制代码
class BOOKS2(GenericAPIView,ListModelMixin):

    queryset = models.Books.objects.all()
    serializer_class = SERList.BookModelSerializer
    pagination_class = PageNumList1

    def get(self,request,*args,**kwargs):
        self.queryset=self.queryset.filter(id__gt=2)
        res=self.list(request, *args, **kwargs)
        # return Response(res)
        return res
复制代码

定义分页器PageNumList1

复制代码
class PageNumList1(PageNumberPagination):
    page_size = 2
    # 单页数量
    page_query_param='nb'
    #  翻页代码
    page_size_query_param='max'
    #  可以定制单页数量
    #  http://127.0.0.1:8000/books/?nb=3&max=5
    max_page_size = 4
复制代码

基于APIView实现的分页

复制代码
class BookApiView(APIView):

    def get(self, request, *args, **kwargs):

        query_list = models.Books.objects.all()
        page = PageNumList1()
        # 在数据库中获取分页的数据
        page_list = page.paginate_queryset(query_list, request, view=self)
        # 对分页进行序列化
        ser = SERList.BookModelSerializer(instance=page_list, many=True)
        return Response(ser.data)
复制代码

路由 

url=http://127.0.0.1:8000/pager/?page=2&size=3

2.LimitOffsetPagination 偏移分页

复制代码
视图类  基于APIView   Geniric 直接配
class
BookApiView(APIView): # 获取所有 def get(self, request, *args, **kwargs): # print(kwargs) query_list = models.Books.objects.all() # ser_list = SERList.BookModelSerializer(query_list, many=True) page = PageNumList2() # 在数据库中获取分页的数据 page_list = page.paginate_queryset(query_list, request, view=self) # 对分页进行序列化 ser = SERList.BookModelSerializer(instance=page_list, many=True) return Response(ser.data)

分页器
class PageNumList2(LimitOffsetPagination):

max_limit = 2
default_limit = 3
limit_query_param = 'limit'
offset_query_param = 'off'
路由
http://127.0.0.1:8000/books/?offset=4&limit=3
复制代码

3. CursorPagination偏移分页

复制代码
分页器
class PageNumList3(CursorPagination):
    cursor_query_param = 'tip'
    page_size = 2
    ordering = '-id'

视图函数
class BookApiView(APIView):

    def get(self, request, *args, **kwargs):

        query_list = models.Books.objects.all()
        page = PageNumList3()
        # 在数据库中获取分页的数据
        page_list = page.paginate_queryset(query_list, request, view=self)
        # 对分页进行序列化
        print(page.get_next_link())
        print(page.decode_cursor(request))
        ser = SERList.BookModelSerializer(instance=page_list, many=True)
        return Response(ser.data)
复制代码

要想提供分页的上下url 还得像apiview一样,自己实例化类。

 

posted on   阿勒泰的鱼  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示