zoukankan      html  css  js  c++  java
  • 分页过滤器

    分页过滤器

    一、自定义分页器PageNumberPagination(常用)

    # 1.自定义分页器.py
    from rest_framework.pagination import PageNumberPagination
    class CoursePageNumberPagination(PageNumberPagination):
        # 一页显示条数
        page_size = 2
    
        # 选择那一页的key,eg:?page=1
        page_query_param = "page"
    
        # 用户自定义一页显示的条数
        page_size_query_param = "page_size"
    
        # 用户自定义一页最大控制条数
        max_page_size = 10
    # 2.使用
    # 分页过滤器
    from .paginations import CoursePageNumberPagination, CourseLimitOffsetPagination, CursorPagination
    
    class FreeCourseListAPIView(ListAPIView):
        queryset = models.Course.objects.filter(is_delete=False, is_show=True).order_by('orders').all()
        serializer_class = serializers.FreeCourseModelSerializer
        
    
        # 自定义的分页器 http://127.0.0.1:8000/course/free?page=1&page_size=2
        pagination_class = CoursePageNumberPagination
    
    

    ​ 总结:

    1. 继承PageNumberPagination,重写属性字段,配置 pagination_class = CoursePageNumberPagination 使用url:http://127.0.0.1:8000/course/free?page=1&page_size=2,page:第一页,page_size:一页显示的数据条数

    二、自定义分页器LimitOffsetPagination

    # 1.自定义分页器.py
    from rest_framework.pagination import LimitOffsetPagination
    class CourseLimitOffsetPagination(LimitOffsetPagination):
        # 默认一页条数
        default_limit = 2
        # 从offset开始往后显示limit条
        limit_query_param = 'limit'
        offset_query_param = 'offset'
        max_limit = 2
    # 2.使用
    # 分页过滤器
    from .paginations import CoursePageNumberPagination, CourseLimitOffsetPagination, CursorPagination
    
    class FreeCourseListAPIView(ListAPIView):
        queryset = models.Course.objects.filter(is_delete=False, is_show=True).order_by('orders').all()
        serializer_class = serializers.FreeCourseModelSerializer
        
    
        # 自定义的分页器 (获取多少条数据的范围)
        """
        http://api.example.org/accounts/?limit=100
        http://api.example.org/accounts/?offset=400&limit=100(从400位置开始,获取100条数据)
        
        """
        
        pagination_class = CoursePageNumberPagination
    

    三、自定义分页器CursorPagination

    # 1.自定义分页器.py
    from rest_framework.pagination import CursorPagination
    class CourseCursorPagination(CursorPagination):
        cursor_query_param = 'cursor'
        page_size = 2
        page_size_query_param = 'page_size'
        max_page_size = 2
        # ordering = 'id'  # 默认排序规则,不能和排序过滤器OrderingFilter共存
    
    # 2.使用
    # 分页过滤器
    from .paginations import CoursePageNumberPagination, CourseLimitOffsetPagination, CursorPagination
    
    class FreeCourseListAPIView(ListAPIView):
        queryset = models.Course.objects.filter(is_delete=False, is_show=True).order_by('orders').all()
        serializer_class = serializers.FreeCourseModelSerializer    
        ordering_fields = ['price', 'id', 'students']
    
    
        # 自定义的分页器(必须与排序一起查询)必须添加排序规则(条件筛选过滤分页),会对连接加密
        # "next": "http://127.0.0.1:8000/course/free?cursor=cD0wLjAw&ordering=price&page_size=1",加密
        # http://127.0.0.1:8000/course/free?ordering=price&page_size=1
        pagination_class = CoursePageNumberPagination 
    
  • 相关阅读:
    golang 使用 protobuf 的教程
    golang语言中sync/atomic包的学习与使用
    《算法竞赛进阶指南》0x21有向无环图中点的可达性统计 topsort+bitset
    《算法竞赛进阶指南》0x21树和图的遍历 求dfs序以及树的重心
    《算法竞赛进阶指南》0x17二叉堆 利用优先队列求k叉哈夫曼树的最优结构
    《算法竞赛进阶指南》0x17二叉堆 链表+红黑树实现高效插入、删除、取最小值
    《算法竞赛进阶指南》0x17二叉堆 POJ2442 矩阵取数求前N大
    GIT-windows系统部署gitblit服务器
    mysql 端口修改
    VUE-开发工具VSCode
  • 原文地址:https://www.cnblogs.com/randysun/p/12293120.html
Copyright © 2011-2022 走看看