标签:不用 request app else 需要 请求 work cal default
为了更好的显示响应的书数据,先基本介绍渲染器的使用:现在settings.py的文件种变量INSTALL_APPS中添加一个app——“rest_framework”,在请求视图类中返回数据响应的方式使用from rest_framework.response import Response的类,请求视图类中可不再使用json.dumps()数据,直接返回响应Response(ser.data),在讲解分页器的知识会运用到视图类中。
在Django restframework中,框架提供了三种分页的方式,以下分点介绍三种分页方式。
1、看第n页,每页显示m条数据:一般页码的请求地址类似于http://localhost:8000/roles/?page=2&size=8
①一般我们可以自定义一个专门为响应的数据提供的分页序列化器,这里以响应角色数据为例
from rest_framework import serializer class PagerSerializer(serializer.ModelSerializer): class Meta: model = Role fields = "__all__"
②如果不使用分页器,响应数据的方式就会将所有的数据显示在前端中
from rest_framework.response import Response class RoleView(APIView): def get(self, *args, **kwargs): roles = Role.object.all() ser = PagerSerializer(instance=roles, many=True) return Response(ser.data)
③使用分页器需要先导入相关的分页器类:from rest_framework.pagination import PageNumberPagination,在查看其中源码时,有一些有关于分页的配置可以在settings.py文件中配置,如果没有配置,就会使用这个类相关的默认值。当然我们可以继承这个类来自定义分页器类,自定义的类只需要修改分页相关的属性值就可以。分页器类的功能是将得到的所有数据先分号页,然后再将分好页的数据放置在序列化中
from rest_framework.pagination import PageNumberPagination class MyPagination(PageNumberPagination): # 页面显示的数据条数 page_size = 2 # 页码请求地址上的url的get参数名称 page_query_param = "size" # 页面允许显示的最多数据条数 max_page_size = 8
④请求的视图类中,返回响应数据的方式发生变化,分页器对象还提供一些方法,让响应的数据更丰富一点:增加上、下页的url地址和查询的总记录数。
from rest_framework.response import Response class RoleView(APIView): def get(self, request, *args, **kwargs): roles = Role.object.all() # 将得到的所有数据分好页 pg = MyPagination() role_pages = pg.paginate_queryset(queryset=roles, request=request, view=self) # 将分好页的数据放置分页序列化器中即可 ser = PagerSerializer(instance=role_oages, many=True) # 这种只会返回数据 # return Response(ser.data) # 这种就会额外显示上下页url地址和总记录数 return pg.get_paginated_response(ser.data)
2、在n个位置后,查看m条数据,一般页码的请求地址类似于http://localhost:8000/roles/?offset=2&limit=8。视图和序列化类都可以不用变,自定义分页类需要继承另外一个类,from rest_framework.pagination import LimitOffsetPagination。当然我们可以继承这个类来自定义分页器类,自定义的类只需要修改分页相关的属性值就可以。分页器类的功能是将得到的所有数据先分号页,然后再将分好页的数据放置在序列化中
from rest_framework.pagination import LimitOffsetPagination class MyPagination(LimitOffsetPagination): # 页面显示的数据条数 default_limit = 2 # 页码请求地址上的url的get参数名称 limit_query_param = "limit" offset_query_param = "offset" # 页面允许显示的最多数据条数 max_limit = 8
3、加密分页,只显示上一页和下一页,一般页码的请求地址类似于http://localhost:8000/roles/?page=fnew39。序列化类都可以不用变,自定义分页类需要继承另外一个类,from rest_framework.pagination import CursorPagination。当然我们可以继承这个类来自定义分页器类,自定义的类只需要修改分页相关的属性值就可以。分页器类的功能是将得到的所有数据先分号页,然后再将分好页的数据放置在序列化中。由于上一页和下一页地址已加密,所以在请求试图类中就只能使用分页对象返回响应的数据:return pg.get_paginated_response()
from rest_framework.pagination import CursorPagination class MyPagination(CursorPagination): # 页面显示的数据条数 page_size = 2 # 页码请求地址上/下一页的url的get参数名称 cursor_query_param = "cursor" # 页面展示数据数url的get参数名称 page_size_query_param = "size" # 查询的数据的排序方式 ordering = "-id" # 页面允许显示的最多数据条数 max_page_size = 8
Django restframework分页器组件增加的基本使用
标签:不用 request app else 需要 请求 work cal default
原文地址:https://www.cnblogs.com/aitiknowledge/p/13097650.html