• Django restframework分页器组件增加的基本使用


    为了更好的显示响应的书数据,先基本介绍渲染器的使用:现在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
  • 相关阅读:
    ABAP 更改DN外向交货单
    ABAP 参照SO item 创建DN
    ABAP 获取客户供应商的电话,地址,email等相关信息
    ABAP 自定义的ALV导出excel按钮,导出ALV内表中其中某几列的数据
    ABAP 后台JOB布置例子
    ABAP 选择屏幕字段动态隐藏和显示
    ABAP 选择屏幕上的导入模板下载按钮
    ABAP 选择屏幕文件导入时,单元格超50字符怎么处理
    ABAP 选择屏幕字段动态隐藏和显示
    人脸检测数据集
  • 原文地址:https://www.cnblogs.com/aitiknowledge/p/13097650.html
Copyright © 2020-2023  润新知