zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Visual Studio 2015编译64位MySQL Connector/C++
    html.parser无法完全解析网页之BUG的修正
    Boost-Visual studio 2015环境配置
    Struts2--拦截器和常用标签库
    Struts2---OGNL表达式和值栈的运用
    Struts2---对Servlet的API的访问,结果页面的配置,数据的封装
    Struts2---入门
    spring mvc 文件上传
    ElasticSearch 基本操作
    SpringBoot 项目打包后获取不到resource下资源的解决
  • 原文地址:https://www.cnblogs.com/os-linux/p/11815367.html
Copyright © 2011-2022 走看看