1. 在settings中进行注册
# drf配置
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
# 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
# 分页设置
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 2
}
2. 在utils/myPagination.py中根据业务要求自定义分页返回结果
from collections import OrderedDict
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
class MyPageNumberPagination(PageNumberPagination):
# 1. page_size_query_param默认为None,前端通过传入pagesize字段指定一页有多少数据
page_size_query_param = 'pagesize'
# 2. 限制最大页面数量,为了安全
max_page_size = 100
# 3. 重写响应值,根据前端想要的 响应字段
def get_paginated_response(self, data):
return Response(OrderedDict([
('page', self.page.number),
('pages', self.page.paginator.num_pages),
('lists', data)
]))
3. 在视图中使用
from meiduo_admin.utils.myPagination import MyPageNumberPagination
class UsersView(ListAPIView):
pagination_class = MyPageNumberPagination
serializer_class = UsersSerialize
# 获取queryset时需要进行排序否则会有报错提示
queryset = models.User.objects.filter(is_staff=False).all().order_by('-date_joined')
4. 路由
from meiduo_admin.user.user_views import UsersView
urlpatterns = [
# 获取用户
path('users/', UsersView.as_view()),
]
5. postman返回结果