针对每个视图
重写page页
from rest_framework.pagination import PageNumberPagination
class Pagination(PageNumberPagination):
def get_page_size(self, request):
try:
# 每页的大小不能小于0
page_size = int(request.query_params.get("page_size", -1))
if page_size < 0:
return self.page_size
return page_size
except:
pass
return self.page_size
视图导入分页
from rest_framework import viewsets
# from django.contrib.auth.models import User # 当前这样写没有问题,后面会有问题
from django.contrib.auth import get_user_model
# 导入这个类,当前视图才有分页效果
from .pagination import Pagination
User = get_user_model()
from .serializers import UserSerializer
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
retrieve:
返回一个实例,当前也就是返回一个用户信息
list:
返回用户列表
"""
queryset = User.objects.all()
serializer_class = UserSerializer
pagination_class=Pagination
# page_size 来定义每页的记录条目数量 例如?page_size=5 则每页显示5条
效果
全局生效
setting.py
REST_FRAMEWORK = {
#'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
# 新版drf schema_class默认用的是rest_framework.schemas.openapi.AutoSchema
"PAGE_SIZE": 10, #提供默认的分页大小
"DEFAULT_PAGINATION_CLASS": "users.pagination.Pagination",
}
视图层(没有任何变动)
from rest_framework import viewsets
# from django.contrib.auth.models import User # 当前这样写没有问题,后面会有问题
from django.contrib.auth import get_user_model
User = get_user_model()
from .serializers import UserSerializer
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
retrieve:
返回一个实例,当前也就是返回一个用户信息
list:
返回用户列表
"""
queryset = User.objects.all()
serializer_class = UserSerializer