首页 > 编程 > Python > 正文

Django rest framework实现分页的示例

2020-02-23 00:13:38
字体:
来源:转载
供稿:网友

第一种分页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)            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表