REST_FRAMEWORK = { "PAGE_SIZE":2 }
from rest_framework.pagination import PageNumberPagination from rest_framework import serializers #### 要在settings配置文件中設置REST_FRAMEWORK = {"PAGE_SIZE":2} 參數來啓動分頁和設置每頁數據數量,默認是不啓用分頁的。 class PagSerializers(serializers.ModelSerializer): class Meta: model = models.Article fields = '__all__' class PagArticle(APIView): """ 方式一:分頁僅獲取數據 def get(self,request,*args,**kwargs): queryset = models.Article.objects.all() page_object = PageNumberPagination() result = page_object.paginate_queryset(queryset,request,self) ser = PagSerializers(instance=result,many=True) return Response(ser.data) """ """ 方式二:分頁數據+分頁信息 def get(self,request,*args,**kwargs): queryset = models.Article.objects.all() page_object = PageNumberPagination() result = page_object.paginate_queryset(queryset,request,self) ser = PagSerializers(instance=result,many=True) return page_object.get_paginated_response(ser.data) """ """ 結果示例輸出 { "count": 6, "next": "http://127.0.0.1:8000/page/article/?page=3", "previous": "http://127.0.0.1:8000/page/article/", "results": [ { "id": 6, "title": "xxx科技有限公司", "summary": "賊拉厲害", "content": "光明正大的吃霸王餐", "status": 1, "cates": 3, "tag": [ 2 ] } ] } """ ### 方式三:自定製 def get(self, request, *args, **kwargs): queryset = models.Article.objects.all() page_object = PageNumberPagination() result = page_object.paginate_queryset(queryset, request, self) ser = PagSerializers(instance=result, many=True) return Response({"count": page_object.page.paginator.count, "results": ser.data})
訪問URL要求:http://api.example.org/accounts/?page=1
python
Views.pyapi
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination from rest_framework import serializers class PagSerializers(serializers.ModelSerializer): class Meta: model = models.Article fields = '__all__' class PagArticle(APIView): def get(self,request,*args,**kwargs): queryset = models.Article.objects.all() page_object = LimitOffsetPagination() result = page_object.paginate_queryset(queryset,request,self) ser = PagSerializers(instance=result,many=True) return Response(ser.data)
訪問URL要求:http://api.example.org/accounts/?offset=400&limit=100
rest