• 04.PageNumberPagination分页


    一.使用默认分页

    1.settings 设置
    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE': 2
    }
    
    2.参数
    • 1.第几页
        # Client can control the page using this query parameter.
        page_query_param = 'page'
        page_query_description = _('A page number within the paginated result set.')
    
    • 2.每页大小
        # Client can control the page size using this query parameter.
        # Default is 'None'. Set to eg 'page_size' to enable usage.
        page_size_query_param = None
        page_size_query_description = _('Number of results to return per page.')
    
    • 3.最大页
        # Set to an integer to limit the maximum page size the client may request.
        # Only relevant if 'page_size_query_param' has also been set.
        max_page_size = None
    

    二.自定义分页

    avue 前端分页参数:

    # 前端很喜欢用 data,把 result 改成 data
    { "total": 40, "pagerCount": 5, "currentPage": 1, "pageSize": 20, "pageSizes": [ 10, 20, 30, 40, 50, 100 ], "background": true }
    
    from rest_framework.pagination import PageNumberPagination
    from rest_framework.response import Response
    from collections import OrderedDict, namedtuple
    
    class LargeResultsSetPagination(PageNumberPagination):
        page_query_param = 'pagerCount'
        page_query_description = '当前第几页'
        page_size = 20
        page_size_query_param = 'pageSize'
        page_size_query_description = '每页条目数'
        max_page_size = 100
    
        def get_paginated_response(self, data):
            return Response(OrderedDict([
                ('total', self.page.paginator.count),
                ('next', self.get_next_link()),
                ('previous', self.get_previous_link()),
                ('data', data)
            ]))
    
    # settings
    REST_FRAMEWORK = {
        # 指定用于支持coreapi的Schema
        'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
        'DEFAULT_PAGINATION_CLASS': 'utils.utils.LargeResultsSetPagination',
        'PAGE_SIZE': 10,
    }
    

    结果如下
    image

    {
        "total": 104,
        "next": "http://127.0.0.1:8000/idcs/?pageSize=1&pagerCount=5",
        "previous": "http://127.0.0.1:8000/idcs/?pageSize=1&pagerCount=3",
        "data": [
            {
                "id": 4,
                "name": "华为机房0",
                "address": "神州路0号大院",
                "phone": "13412345678",
                "email": "mail_0@com.cn",
                "letter": "hw0"
            }
        ]
    }
    

    如果某个视图不需要分页,视图设置分页类为 None 即可

    pagination_class = None
    
  • 相关阅读:
    zabbix 监控获取源码包的地址
    为MongoDB加集群验证的关键点
    Mongodb 集群加keyFile认证
    Prometheus完整的部署方案+实战实例
    如何让你的linux的命令行变得很炫
    redis实现加锁的几种方法示例详解
    phpquerylist 抓取数据详解
    mysql 主从配置,主-》windows,从-》centos6.5
    VMware 虚拟机centos下链接网络配置
    【Mysql】表链接
  • 原文地址:https://www.cnblogs.com/jenvid/p/12927254.html
Copyright © 2020-2023  润新知