restframework 分页组件、相应器

匿名 (未验证) 提交于 2019-12-02 23:57:01

一、分页组件

1、PageNumberPagination

a、全局配置

导入模块

from rest_framework.pagination import PageNumberPagination

在视图类中配置

def get(self, request):   # 注意:数据quweyset     book_list = Book.objects.get_queryset().order_by('pk')     # 实例化     pnp = PageNumberPagination()     # 调用方法     pnp_list = pnp.paginate_queryset(book_list, request, self)     book_serialize = BookModelSerialize(pnp_list, many=True, context={'request': request})     return Response(book_serialize.data)

在配置文件中,修改全局page_size

REST_FRAMEWORK = {     'PAGE_SIZE': 1, }

注意:queryset,book_list

b、局部分页

自定义分页类,继承PageNumberPagination

class MyPageNumberPagination(PageNumberPagination):     page_size = 1     page_query_param = 'page'     # 临时分页的参数 size=当前页面显示的数量     page_size_query_param = 'size'     # 临时分页size的最大值     max_page_size = 3

视图类

class BookView(APIView):     # parser_classes = [JSONParser]     # 查看书籍, 返回所有数据(书籍信息)     def get(self, request):         # 获取book的所有数据         book_list = Book.objects.get_queryset().order_by('pk')         # 实例化对象         pnp = MyPageNumberPagination()         pnp_list = pnp.paginate_queryset(book_list, request, self)         book_serialize = BookModelSerialize(pnp_list, many=True)         return Response(book_serialize.data)

2、LimitOffsetPagination

导入模块

from rest_framework.pagination import LimitOffsetPagination

a、全局设置和上面相似,具体看源码

b、局部设置

分页类

class MyLimitOffsetPagination(LimitOffsetPagination):     default_limit = 1     # limit 分页 limit=n ,一页有n条数据     limit_query_param = 'limit'     # offset 偏移的数据量 offset=n,从第n条数据开始分页     offset_query_param = 'offset'

视图类

class BookView(APIView):     # parser_classes = [JSONParser]     # 查看书籍, 返回所有数据(书籍信息)     def get(self, request):         # 获取book的所有数据         book_list = Book.objects.get_queryset().order_by('pk')         # 实例化对象         pnp = MyLimitOffsetPagination()         pnp_list = pnp.paginate_queryset(book_list, request, self)         book_serialize = BookModelSerialize(pnp_list, many=True)         return Response(book_serialize.data)

注意:limit是每页的数据量,offset是从第几条数据开始分页,不包含此条数据

3、终极视图组件分页

a、局部

注意:认证、权限可以有多个,分页器只能有一个

class AuthorViewSet(viewsets.ModelViewSet):     # permission_classes = [PermissionSet]     # authentication_classes = [ModelToken]     pagination_class = MyLimitOffsetPagination     queryset = Author.objects.all()     serializer_class = AuthorModelSerializer

b、全局

REST_FRAMEWORK = {     'DEFAULT_PAGINATION_CLASS': 'app01.views.MyLimitOffsetPagination', }

设置局部无分页

pagination_class = PageNumberPagination

二、相应器

restframework 自定义的

from rest_framework.response import Response

注意:在浏览器和postman显示数据的格式不一样

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!