• DRF 分页


    PageNumberPagination

    • Settings.py文件
    REST_FRAMEWORK = {
        "PAGE_SIZE":2
    }
    
    • views.py
    from rest_framework.pagination import PageNumberPagination
    from rest_framework import serializers
    
    #### 要在settings配置文件中设置REST_FRAMEWORK = {"PAGE_SIZE":2} 参数来启动分页和设置每页数据数量,默认是不启用分页的。
    
    class PagSerializers(serializers.ModelSerializer):
        class Meta:
            model = models.Article
            fields = '__all__'
    
    
    class PagArticle(APIView):
        """ 方式一:分页仅获取数据
        def get(self,request,*args,**kwargs):
            queryset = models.Article.objects.all()
            page_object = PageNumberPagination()
            result = page_object.paginate_queryset(queryset,request,self)
            ser = PagSerializers(instance=result,many=True)
            return Response(ser.data)
        """
    
        """ 方式二:分页数据+分页信息
        def get(self,request,*args,**kwargs):
            queryset = models.Article.objects.all()
            page_object = PageNumberPagination()
            result = page_object.paginate_queryset(queryset,request,self)
            ser = PagSerializers(instance=result,many=True)
            return page_object.get_paginated_response(ser.data)
        """
    
        """ 结果示例输出
        {
        "count": 6,
        "next": "http://127.0.0.1:8000/page/article/?page=3",
        "previous": "http://127.0.0.1:8000/page/article/",
        "results": [
            {
                "id": 6,
                "title": "xxx科技有限公司",
                "summary": "贼拉厉害",
                "content": "光明正大的吃霸王餐",
                "status": 1,
                "cates": 3,
                "tag": [
                    2
                ]
            }
            ]
        }
        """
    
        ### 方式三:自定制
        def get(self, request, *args, **kwargs):
            queryset = models.Article.objects.all()
            page_object = PageNumberPagination()
            result = page_object.paginate_queryset(queryset, request, self)
            ser = PagSerializers(instance=result, many=True)
            return Response({"count": page_object.page.paginator.count, "results": ser.data})
    

    访问URL要求:http://api.example.org/accounts/?page=1

    LimitOffsetPagination

    Views.py

    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination
    from rest_framework import serializers
    
    class PagSerializers(serializers.ModelSerializer):
        class Meta:
            model = models.Article
            fields = '__all__'
    
    class PagArticle(APIView):
        def get(self,request,*args,**kwargs):
            queryset = models.Article.objects.all()
            page_object = LimitOffsetPagination()
            result = page_object.paginate_queryset(queryset,request,self)
            ser = PagSerializers(instance=result,many=True)
            return Response(ser.data)
    

    访问URL要求:http://api.example.org/accounts/?offset=400&limit=100

  • 相关阅读:
    Linux 安装Samba服务器
    常见状态码StatusCode
    urllib详细版
    set uniion()
    python urljoin
    'gbk' codec can't decode byte 0xad in position 12: illegal multibyte sequence
    php 的windows集成开发环境
    图文并茂解释数字证书(转)
    Web安全测试指南--权限管理
    互联互通协议安全设计
  • 原文地址:https://www.cnblogs.com/os-linux/p/11815367.html
Copyright © 2020-2023  润新知