「Django」rest_framework学习系列-分页
分页
a.分页,看第N页,每页显示N条数据
方式一:使用PageNumberPagination创建分页对象,配合settings全局配置
views设置
from rest_framework.pagination import PageNumberPagination class PagesView(APIView): def get(self,request,*args,**kwargs): #获取所有数据 m = models.UserInfo.objects.all() #创建分页对象 pg = PageNumberPagination() #在数据库中获取分页的数据 pa_info = pg.paginate_queryset(queryset=m,request=request,view=self) #对数据进行序列化,此处参照序列化部分 ser = pages.PagesSerializer(instance=pa_info,many=True) #自带的返回格式,效果更好 return pg.get_paginated_response(ser.data) #return Response(ser.data)
settings设置
REST_FRAMEWORK = { 'PAGE_SIZE':2, }
返回结果
"count": 10, "next": "http://127.0.0.1:8000/api/v1/pages/?page=3&size=2", "previous": "http://127.0.0.1:8000/api/v1/pages/?size=2",
方式二:不使用全局配置,继承PageNumberPagination做自定制类,其余同上
自定制类:
from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination): page_size = 3 #设置每页显示个数 page_size_query_param = 'size' #设置前段传参字段 max_page_size = 5 #设置最大显示个数 page_query_param = 'page' #前段页面传参字段
urls:
http://127.0.0.1:8000/api/v1/pages/?page=2&size=2
views:
class PagesView(APIView): def get(self,request,*args,**kwargs): #获取所有数据 m = models.UserInfo.objects.all() #创建分页对象,与方式一不同 pg = MyPageNumberPagination() #在数据库中获取分页的数据 pa_info = pg.paginate_queryset(queryset=m,request=request,view=self) #对数据进行序列化 ser = pages.PagesSerializer(instance=pa_info,many=True) return pg.get_paginated_response(ser.data)