分页: 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)