zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java----设计模式--创建型模式(GOF23)
    java----作用域
    java和python对比----实例化的对象属性:
    java----关键字
    java----Java的栈,堆,代码,静态存储区的存储顺序和位置
    java----面对对象
    算法----取0~30不重复的10个整数
    算法----二分查找算法
    织梦 验证码不显示问题
    dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入
  • 原文地址:https://www.cnblogs.com/aitiknowledge/p/13097650.html
Copyright © 2011-2022 走看看