zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    Codeforces Round #368 Div. 2
    TXT文件去除多余空行
    #4247. 串
    #4322. 字符串游戏(strgame)
    #4214. 谢特
    #4155. 咱们去烧菜吧
    #4350. 「十二省联考 2019」字符串问题
    #4349. 「十二省联考 2019」异或粽子
    #4303. 跳蚤
    #4302. 魔法咒语
  • 原文地址:https://www.cnblogs.com/kuku0223/p/11351840.html
Copyright © 2011-2022 走看看