首页 > 其他 > 详细

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

时间:2019-08-14 15:01:53      阅读:55      评论:0      收藏:0      [点我收藏+]
分页:
  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)

  

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

原文:https://www.cnblogs.com/kuku0223/p/11351840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!