一:简单分页
简单分页就是查看第n页,每页显示n条数据
使用方法: -1 导入PageNumberPagination类 -2 实例化产生一个对象 -page_pagination = PageNumberPagination() -3 需要配置四个参数:page_size,page_query_param,page_size_query_param,max_page_size -page_size必须指定:在setting中指定或者直接赋值 -4 调用下面的方法,返回ret数据 ret = page_pagination.paginate_queryset(book_list, request, self) -5 再序列化,就是序列化返回的数据,也就是ret
-类中需要掌握的几个属性 -page_size:控制每页显示条数 -page_query_param:控制查询第几页的查询参数, -比如page_query_param=‘xx‘ -http://127.0.0.1:8000/books/?xx=2 表示查询第二页的数据 -page_size_query_param:控制每页最大显示的条数 -比如page_pagination.page_size_query_param=‘max‘ -http://127.0.0.1:8000/books/?xx=2&max=6 表示查询第二页的数据,每页显示6条 -max_page_size:控制每页最大显示的条数 -比如:page_pagination.max_page_size=7 -http://127.0.0.1:8000/books/?max=1000 最多显示7条
使用配置文件
在settings.py中配置
REST_FRAMEWORK = { # 每页显示两条 ‘PAGE_SIZE‘:2 }
views.py
from rest_framework.pagination import PageNumberPagination class BooksView(APIView): def get(self,request): book_list = models.Book.objects.all() page_pagination = PageNumberPagination() page_list = page_pagination.paginate_queryset(book_list,request,view=self) ser = BookSerializer(instance=page_list,many=True) print(ser.data) return Response(ser.data)
自定义四个参数
from rest_framework.pagination import PageNumberPagination class BooksView(APIView): def get(self,request): #使用方法 #1.导入PageNumberPagination类 #2.实例化产生一个对象 #-page_pagination = PageNumberPagination() #3.需要配置四个参数: page_size, page_query_param, page_size_query_param, max_page_size #-page_size必须指定: 在setting中指定或者直接赋值 #4.调用下面的方法, 返回ret数据 #-ret = page_pagination.paginate_queryset(book_list, request, self) # 5.再序列化,就是序列化返回的数据,也就是ret book_list = models.Book.objects.all() page_pagination = PageNumberPagination() #四个参数 page_pagination.page_size = 4 #每页的条数 page_pagination.page_query_param = ‘ccc‘ #控制查询第几页的查询参数, page_pagination.page_size_query_param = ‘max‘ #用户控制每页显示的条数 page_pagination.max_page_size = 6 #每页显示的最大条数,防止用户自定义的条数太大 page_list = page_pagination.paginate_queryset(book_list,request,view=self) ser = BookSerializer(instance=page_list,many=True) print(ser.data) return Response(ser.data)
二:偏移分页
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination class BooksView(APIView): def get(self,request): #使用方法:同简单分页 book_list = models.Book.objects.all() page_pagination = LimitOffsetPagination() page_pagination.default_limit = 5 #默认显示的每页数量,默认偏移的数量 page_pagination.limit_query_param = ‘xx‘ #往后偏移多少条,默认是limit,也可以自定义 page_pagination.offset_query_param = ‘ee‘ #标杆值,默认是offser,也可以自定义 # limit_query_param + offset_query_param联合起来用: # -访问: http://127.0.0.1:8000/books/?limit=1&offset=5 表示: 以数据的第5条作为标杆, 往后偏移1条 page_list = page_pagination.paginate_queryset(book_list,request,view=self) ser = BookSerializer(instance=page_list,many=True) print(ser.data) return Response(ser.data)
三:CursorPagination(加密分页,只能看上一页和下一页,速度快)
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination class BooksView(APIView): def get(self,request): #使用方法:同简单分页 #重点参数: #page_size: 每页显示的条数 #cursor_query_param: 不需要动 #ordering: 按什么排序 #通过get_paginated_response返回结果中带上一页和下一页的链接地址 #page_pagination.get_paginated_response(book_ser.data) #方法的用法 book_list = models.Book.objects.all() page_pagination = CursorPagination() page_pagination.ordering = ‘id‘ page_list = page_pagination.paginate_queryset(book_list,request,view=self) ser = BookSerializer(instance=page_list,many=True) print(ser.data) return page_pagination.get_paginated_response(ser.data)
四:响应器(不需要改)
响应回去的页面,数据格式是不同的
局部使用:在视图类中配置
renderer_classes = [JSONRenderer,BrowsableAPIRenderer]
全局使用:在settings中配置
‘DEFAULT_RENDERER_CLASSES‘:( ‘rest_framework.renderers.JSONRenderer‘, ‘rest_framework.renderers.BrowsableAPIRenderer‘, ),
五:url控制器
自动生成路由:
在url.py中:
from rest_framework import routers #生成一个router对象 router=routers.DefaultRouter() # 两个参数,一个是匹配的路由,一个是视图中写的CBV的类 router.register(‘books‘,views.BooksView) urlpatterns = [ url(r‘‘,include(router.urls)) ]
六:解析器
解析器的作用:能够解析前端传递的数据格式:urlencode,formdata,json格式
默认情况下解析所有格式内置了三种解析器
from rest_framework.parsers import JSONParser from rest_framework.parsers import FormParser from rest_framework.parsers import MultiPartParser
解析器的局部使用:
在视图类中配置:parser_classes=[JSONParser]
全局使用:在settings.py中配置:
‘DEFAULT_PARSER_CLASSES‘: ( ‘rest_framework.parsers.JSONParser‘, ‘rest_framework.parsers.FormParser‘, ‘rest_framework.parsers.MultiPartParser‘ )
Django Rest Framework --- 分页器组件
原文:https://www.cnblogs.com/liuxiaolu/p/10638190.html