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

  • 相关阅读:
    JqueryValidate表单相同Name不校验问题解决
    钉钉SDK使用。
    禁用software reporter tool.exe 解决CPU高占用率的问题
    一个小巧,也很nice的“小日历”--一个Android App
    Android模拟器太慢怎么办?使用微软的VS模拟器
    windows10下录屏
    启明星会议室预订系统(企业微信)版发布
    JS图片压缩
    JS操作摄像头
    钉钉版会议室预订系统使用指南
  • 原文地址:https://www.cnblogs.com/os-linux/p/11815367.html
Copyright © 2011-2022 走看看