1. api/pagination.py
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination
class StudentPageNumberPagination(PageNumberPagination):
page_size = 2
max_page_size = 3
page_size_query_param = 'size'
page_query_param = 'page'
class StudentLimitOffsetPagination(LimitOffsetPagination):
default_limit = 2
limit_query_description = 'limit'
offset_query_param = 'offset'
max_limit = 4
2. api/views.py
class AuthView(APIView):
authentication_classes = []
permission_classes = []
parser_classes = [JSONParser, ]
throttle_classes = []
def get(self, request, *args, **kwargs):
students = Student.objects.get_queryset().order_by('id')
page = StudentPageNumberPagination()
page_students = page.paginate_queryset(queryset=students, request=request, view=self)
students_ser = StudentSerializer(instance=page_students, many=True)
return page.get_paginated_response(data=students_ser.data)
3. postman
(1)
url: http://127.0.0.1:8011/api/auth/?page=2&token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 5,
"next": "http://127.0.0.1:8011/api/auth/?page=3&token=dbfa6b230b9ca22302a00ea918346f86",
"previous": "http://127.0.0.1:8011/api/auth/?token=dbfa6b230b9ca22302a00ea918346f86",
"results": [
{
"id": 6,
"name": "student3"
},
{
"id": 7,
"name": "student4"
}
]
}
(2)
url: http://127.0.0.1:8011/api/auth/?page=2&size=3&token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 6,
"next": null,
"previous": "http://127.0.0.1:8011/api/auth/?size=3&token=dbfa6b230b9ca22302a00ea918346f86",
"results": [
{
"id": 7,
"name": "student4"
},
{
"id": 8,
"name": "student5"
},
{
"id": 9,
"name": "student6"
}
]
}
(3)
url: http://127.0.0.1:8011/api/auth/?offset=2&limit=3&token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 6,
"next": "http://127.0.0.1:8011/api/auth/?limit=3&offset=5&token=dbfa6b230b9ca22302a00ea918346f86",
"previous": "http://127.0.0.1:8011/api/auth/?limit=3&token=dbfa6b230b9ca22302a00ea918346f86",
"results": [
{
"id": 6,
"name": "student3"
},
{
"id": 7,
"name": "student4"
},
{
"id": 8,
"name": "student5"
}
]
}