django rest framework 自定義分頁返回信息

這一章給大家講解如何自定義分頁的返回信息

1、settings.py 定義自定義返回信息的腳本位置


#settings.conf 
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'common.utils.custom_pagination.LargeResultsSetPagination',
    'PAGE_SIZE': 20, #可選可不選,如果在此處填寫,則優先級大於自定義裏面的page
}

2、編寫自定義返回分頁信息腳本

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination 
from collections import OrderedDict
from rest_framework.response import Response

class LargeResultsSetPagination(LimitOffsetPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 10000
    
    def get_paginated_response(self, data):
        code = 200
        msg = 'success'
        if not data:
            code = 404
            msg = "data not found"
        
        return Response(OrderedDict([
            ('code',code),
            ('msg', msg),
            ('count', self.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('data', data),
        ]))

這樣當我們數據多的時候就會就會進行分頁提示

{
    "code": 200,
    "msg": "success",
    "count": 5,
    "next": null,
    "previous": null,
    "data": [
        {
            "id": 9,
            "hostname": "sj-jn-27-221.103.134",
            "type": 2,
            "vendor": "2",
            "ip": "12.12.12.38",
            "status": 0,
            "create_time": "2018-11-16T16:51:23.238087+08:00",
            "update_time": "2018-11-16T16:51:23.238109+08:00"
        },
        {
            "id": 7,
            "hostname": "sj-jn-27-221.103.133",
            "type": 1,
            "vendor": "2",
            "ip": "12.12.12.37",
            "status": 0,
            "create_time": "2018-11-16T16:50:54.632770+08:00",
            "update_time": "2018-11-16T16:50:54.632827+08:00"
        },
        {
            "id": 5,
            "hostname": "sj-jn-27-221.103.132",
            "type": 0,
            "vendor": "2",
            "ip": "12.12.12.36",
            "status": 0,
            "create_time": "2018-11-16T16:49:04.951364+08:00",
            "update_time": "2018-11-16T16:49:04.951419+08:00"
        },
        {
            "id": 3,
            "hostname": "sj-jn-27-221.103.131",
            "type": 0,
            "vendor": "2",
            "ip": "12.12.12.35",
            "status": 0,
            "create_time": "2018-11-16T16:46:44.996822+08:00",
            "update_time": "2018-11-16T16:46:44.996845+08:00"
        },
        {
            "id": 1,
            "hostname": "sj-jn-27-221.103.130",
            "type": 0,
            "vendor": "19",
            "ip": "12.12.12.34",
            "status": 0,
            "create_time": "2018-11-16T16:45:30.665053+08:00",
            "update_time": "2018-11-16T16:45:30.665087+08:00"
        }
    ]
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章