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一样,自己实例化类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用