• Django rest-framework框架-组件之分页


    分页:
      a. 分页,看第n页, 每页显示n条数据
    
    from rest_framework import serializers
    from api import models
    from rest_framework.pagination import PageNumberPagination
    class PagerSerializer(serializers.ModelSerializer):
          class Meta:
                model = models.Role
                fields = "__all__"
    #第一版
    #url http://www.t.com/api/v1/page/?page=2 显示第2页
    class PagerView(APIView):
          def get(self, request, *args, **kwargs):
          	  #获取所有数据
              roles = models.Role.objects.all()
              #获取分页对象
              pg = PageNumberPagination()
              #在数据库中获取分页数据
              pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
              #对分页数据进行序列化
              ser = PagerSerializer(instance=pager_roles,many=True)
              return response(ser.data) 
    
    #全局配置 分页参数 settings.py
    REST_FRAMEWORK = {
    	"PAGE_SIZE": 2,  #表示没页显示两个对象
    }
    
    第二版: 自定义分页
    from rest_framework.pagination import PageNumberPagination
    #自定义类  继承PageNumberPagination
    class MyPagerNumberPagination(PageNumberPagination):
    	  page_size = 2  #每页显示几个对象
    
    	  #关键字 size  http://www.t.com/api/v1/page/?page=2&size=5
    	  #可以定制一页显示多少个 
    	  page_size_query_param = 'size'
    	  #每页最大显示多少个  比如最大显示5个对象
    	  max_page_size = 5
    	  #关键字 page  http://www.t.com/api/v1/page/?page=2
    	  page_query_param = 'page'
    
    
    class PagerView(APIView):
          def get(self, request, *args, **kwargs):
          	  #获取所有数据
              roles = models.Role.objects.all()
              #获取分页对象
              pg = MyPagerNumberPagination()
              #在数据库中获取分页数据
              pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
              #对分页数据进行序列化
              ser = PagerSerializer(instance=pager_roles,many=True)
              #返回一个response对象 里面带上一页下一页的url
              return pg.get_paginated_response(ser.data)
    
    
    b. 分页,在n个位置,向后查看n条数据
    
    from rest_framework.pagination import LimitOffsetPagination
    class MyLimitOffsetPagination(LimitOffsetPagination):
    	  default_limit = 2  #每页显示几个对象
    	  #关键字 size  http://www.t.com/api/v1/page/?offset=4&limit=5 从第4个开始向后取5条
    	  #关键字 limit  从第几个开始向后取几条
    	  limit_query_param = 'limit'
    	  #关键字 offset  从第几个开始
    	  offset_query_param = 'offset'
    	  #最多向后显示限制5
    	  max_limit = 5
    
    
    class PagerView(APIView):
          def get(self, request, *args, **kwargs):
          	  #获取所有数据
              roles = models.Role.objects.all()
              #获取分页对象
              pg = MyLimitOffsetPagination()
              #在数据库中获取分页数据
              pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
              #对分页数据进行序列化
              ser = PagerSerializer(instance=pager_roles,many=True)
              #返回一个response对象 里面带上一页下一页的url
              return pg.get_paginated_response(ser.data)
    
    
    
    
    
    
    c. 加密分页,上一页和下一页
    from rest_framework.pagination import CursorPagination
    class MyCursorPagination(CursorPagination):
    	  page_size = 2  #每页显示几个对象
    	  #关键字 size  http://www.t.com/api/v1/page/?cursor=3IUSE&¥@*#GEE
    	  #关键字 cursor  
    	  cursor_query_param = 'cursor'
    	  #排序规则 使用id来排序 -号是倒序
    	  ordering = '-id'
    	  #最多向后显示限制5
    	  cursor_size_query_param = None
    	  max_page_size =None
    
    class PagerView(APIView):
          def get(self, request, *args, **kwargs):
          	  #获取所有数据
              roles = models.Role.objects.all()
              #获取分页对象
              #加密http://www.t.com/api/v1/page/?cursor=3IUSE&¥@*#GEEW 页码加了密的
              pg = MyCursorPagination(order='id')
              #在数据库中获取分页数据
              pager_roles = pg.paginate_queryset(queryset=roles, request=request,views=self)
              #对分页数据进行序列化
              ser = PagerSerializer(instance=pager_roles,many=True)
              #返回一个response对象 里面带上一页下一页的url
              return pg.get_paginated_response(ser.data)
    

      

  • 相关阅读:
    package.json 字段全解析 share
    Git 使用方法
    浅谈移动前端的最佳实践(转)
    node启动服务后,窗口不能关闭。pm2了解一下
    WebSocket--客户端
    布局:多列等高布局方法
    uni-app调用支付宝、微信支付
    scss 入门基础
    mac生成iOS证书(配图)
    通过扫码打开IOS的App Store下载APP(Android版暂时没找到解决方法)
  • 原文地址:https://www.cnblogs.com/kuku0223/p/11351840.html
Copyright © 2020-2023  润新知