django rest framework实现分页功能

本文介绍如何在 Django REST 框架中自定义分页功能。通过在视图函数中使用 Django 的 Paginator 类,结合请求参数控制每页显示数量及当前页数,实现了灵活的分页效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在web开发中很多需求都需要实现分页功能,然而 Django Rest Framework 自带的分页功能,只能在 mixins.ListModelMixin and generics.GenericAPIView classes 继承这两个类才可以使用,而我们通常为了灵活性,往往会继承APIView 来实现,那么我们就需要自已使用分页功能。

一.serializers.py文件中定义序列化类

from rest_framework.serializers import Serializer
from models import MyModel

class MySerializer( Serializer.ModelSerializers):
    
    class Meta:
        model = MyModel
        fields = ("user_name", "age")

二.views.py视图函数中

 
  
from rest_framework.views import APIView 
from rest_framework from rest_framework.response import Response
from rest_framework.decorators import api_view
from django.core.paginator import Paginator
from serializers import MySerializer
from models import MyModel

@api_view(["GET"])
def get_list(request):
    try:
        page_size = int(request.GET.get('page_size', 2))
        page = int(request.GET.get('page', 1))
    except (TypeError, ValueError):
        return Response(status=status.HTTP_400_BAD_REQUEST)
  try:
    objs = MyModel.objects.all()
  except:
    return Response(status=status.HTTP_417_EXPECTATION_FAILED)    
  paginator = Paginator(objs, page_size) # paginator对象 total = paginator.num_pages #总页数 try: objs = paginator.page(page) except PageNotAnInteger: objs = paginator.page(1) except EmptyPage: objs = paginator.page(paginator.num_pages) serializer = MySerializer(objs, many=True) #序列化操作 return Response(data={ 'detail': serializer.data, page': page, 'total': total }, status=status.HTTP_200_OK) #返回

 

转载于:https://www.cnblogs.com/lowmanisbusy/p/9124182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值