drf----分页

PageNumberPagination

1,配置

  • REST_FRAMEWORK = {
        "PAGE_SIZE": 2,
        "DEFAULT_PAGINATION_CLASS": 'rest_framework.paginate.PageArticleSerializer',
    }
    

2,url

  • 
    from django.conf.urls import url
    from django.contrib import admin
    from API import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^new/article/$', views.NewArticleView.as_view(),),
        url(r'^new/article/(?P<pk>\d+)/$', views.NewArticleView.as_view(),),
        url(r'^page/article/$', views.PageArticleView.as_view(), ),
    
    ]
    
    

3,字段处理

  • from rest_framework.pagination import PageNumberPagination
    class PageArticleSerializer(serializers.ModelSerializer):
    	class Meta:
            model = models.Article
            fields = "__all__"
    

4,视图

  • class PageArticleView(APIView):
        def get(self, request, *args, **kwargs):
            queryset = models.Article.objects.all()
    
            # 方式一 仅数据
            """
            # 调用分页对象.paginate_queryset方法进行分页,得到的结果是分页之			后的数据
            page_obj = PageNumberPagination()
            # result就是分页玩的一部分数据
            result = page_obj.paginate_queryset(queryset, request, self)
            # 序列化分页之后的数据
            ser = serializer.PageArticleSerializer(instance=result, many=True)
            return Response(ser.data)
            """
    
            # 方式二 数据+分页信息
            """
            page_obj = PageNumberPagination()
            result = page_obj.paginate_queryset(queryset, request, self)
            ser = serializer.PageArticleSerializer(instance=result, many=True)
            return page_obj.get_paginated_response(ser.data)
            """
    
            # 方式三 数据加部分分页信息,Response({可定制})
            page_obj = PageNumberPagination()
            result = page_obj.paginate_queryset(queryset, request, self)
            ser = serializer.PageArticleSerializer(instance=result, many=True)
            return Response({
                "count": page_obj.page.paginator.count,
                "result": ser.data
            })
    
    

LimitOffsetPagination

  • from rest_framework.pagination import PageNumberPagination
    from rest_framework.pagination import LimitOffsetPagination
    from rest_framework import serializers
    
    
    class PageArticleSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Article
    
    
    fields = "__all__"
    
    
    class HulaLimitOffsetPagination(LimitOffsetPagination):
        max_limit = 2
    
    
    class PageArticleView(APIView):
        def get(self, request, *args, **kwargs):
            queryset = models.Article.objects.all()
            page_object = HulaLimitOffsetPagination()
            result = page_object.paginate_queryset(queryset, request, self)
            ser = PageArticleSerializer(instance=result, many=True)
            return Response(ser.data)
    
    
posted @ 2019-11-23 15:59  阿浪阿浪  阅读(196)  评论(0编辑  收藏  举报