zoukankan      html  css  js  c++  java
  • 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)
      
      
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    (七)策略模式详解
    (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
    递归锁,死锁,使用递归锁解决死锁,信号量
    并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
    线程了解以及创建线程的Threading模块中的部分方法
    进程 >> 互斥锁、队列与管道、生产者消费者模型
    进程比较基础的内容
    基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
    网络基础 + 简易服务端和客户端
    单例模式
  • 原文地址:https://www.cnblogs.com/daviddd/p/11918368.html
Copyright © 2011-2022 走看看