第一种分页PageNumberPagination
基本使用
(1)urls.py
urlpatterns = [ re_path('(?P<version>[v1|v2]+)/page1/', Pager1View.as_view(),) #分页1]
(2)api/utils/serializers/pager.py
# api/utils/serializsers/pager.pyfrom rest_framework import serializersfrom api import modelsclass PagerSerialiser(serializers.ModelSerializer): class Meta: model = models.Role fields = "__all__"
(3)views.py
from api.utils.serializsers.pager import PagerSerialiserfrom rest_framework.response import Responsefrom rest_framework.pagination import PageNumberPaginationclass Pager1View(APIView): def get(self,request,*args,**kwargs): #获取所有数据 roles = models.Role.objects.all() #创建分页对象 pg = PageNumberPagination() #获取分页的数据 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #对数据进行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)
(4)settings配置
REST_FRAMEWORK = { #分页 "PAGE_SIZE":2 #每页显示多少个}
自定义分页类
#自定义分页类class MyPageNumberPagination(PageNumberPagination): #每页显示多少个 page_size = 3 #默认每页显示3个,可以通过传入pager1/?page=2&size=4,改变默认每页显示的个数 page_size_query_param = "size" #最大页数不超过10 max_page_size = 10 #获取页码数的 page_query_param = "page"class Pager1View(APIView): def get(self,request,*args,**kwargs): #获取所有数据 roles = models.Role.objects.all() #创建分页对象,这里是自定义的MyPageNumberPagination pg = MyPageNumberPagination() #获取分页的数据 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #对数据进行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)
第二种分页 LimitOffsetPagination
自定义
#自定义分页类2class MyLimitOffsetPagination(LimitOffsetPagination): #默认显示的个数 default_limit = 2 #当前的位置 offset_query_param = "offset" #通过limit改变默认显示的个数 limit_query_param = "limit" #一页最多显示的个数 max_limit = 10class Pager1View(APIView): def get(self,request,*args,**kwargs): #获取所有数据 roles = models.Role.objects.all() #创建分页对象 pg = MyLimitOffsetPagination() #获取分页的数据 page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) #对数据进行序列化 ser = PagerSerialiser(instance=page_roles,many=True) return Response(ser.data)
新闻热点
疑难解答