zoukankan      html  css  js  c++  java
  • drf-分页

    简单使用

    总路由

    from django.contrib import admin
    from django.urls import path,include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/', include('api.urls')),
    ]

    应用下路由

    from django.urls import path, re_path
    from api import views
    
    urlpatterns = [
        path('books2/', views.BookView.as_view()),   # 继承了ListAPIView
    ]

    views.py

    from api import models
    from api.ser import BookModelSerializer
    # 查所有,才需要分页
    from rest_framework.generics import ListAPIView
    # 内置三种分页方式
    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    '''
    PageNumberPagination
        page_size:每页显示的条数
    '''
    class BookView(ListAPIView):
        queryset = models.Book.objects.all()
        serializer_class = BookModelSerializer
        # 配置分页
        pagination_class = PageNumberPagination

    settings.py

    REST_FRAMEWORK = {
        'PAGE_SIZE': 1,
    }

    自定义分页器

    views.py

    from api import models
    from api.ser import BookModelSerializer
    # 查所有,才需要分页
    from rest_framework.generics import ListAPIView
    # 内置三种分页方式
    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    '''
    PageNumberPagination
        page_size:每页显示的条数
        page_query_param:前端发送的页数关键字名称,(例如:page_query_param='page',查询时http://127.0.0.1:8000/api/books2/?page=2)   
        page_size_query_param='size':前端发送的每页数目关键字名
        max_page_size=5    # 前端最多能设置的每页数量
    '''
    class MyPageNumberPagination(PageNumberPagination):
        page_size = 1
        page_query_param = "aaa"
    
    class BookView(ListAPIView):
        queryset = models.Book.objects.all().filter(is_delete=False)
        serializer_class = BookModelSerializer
        # 配置分页
        pagination_class = MyPageNumberPagination

    如果用APIView分页

    from api import models
    from api.ser import BookModelSerializer
    # 查所有,才需要分页
    from rest_framework.generics import ListAPIView
    # 内置三种分页方式
    from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    '''
    PageNumberPagination
        page_size:每页显示的条数
        page_query_param:前端发送的页数关键字名称,(例如:page_query_param='page',查询时http://127.0.0.1:8000/api/books2/?page=2)   
        page_size_query_param='size':前端发送的每页数目关键字名
        max_page_size=5    # 前端最多能设置的每页数量
    '''
    class MyPageNumberPagination(PageNumberPagination):
        page_size = 1
        page_query_param = "aaa"
    
    # class BookView(ListAPIView):
    #     queryset = models.Book.objects.all().filter(is_delete=False)
    #     serializer_class = BookModelSerializer
    #     # 配置分页
    #     pagination_class = MyPageNumberPagination
    
    
    # 如果使用APIView分页
    
    class BookView(APIView):
        def get(self,request,*args,**kwargs):
            book_list=models.Book.objects.all()
            # 实例化得到一个分页器对象
            page_cursor=MyPageNumberPagination()
    
            book_list=page_cursor.paginate_queryset(book_list,request,view=self)
            next_url =page_cursor.get_next_link()
            pr_url=page_cursor.get_previous_link()
            # print(next_url)
            # print(pr_url)
            book_ser=BookModelSerializer(book_list,many=True)
            return page_cursor.get_paginated_response(data=book_ser.data)
  • 相关阅读:
    C加加学习之路 1——开始
    哈夫曼树C++实现详解
    Linux常用命令
    Accp第二章:基础知识
    第一章Accp 8.0
    泛型集合
    深入C#数据类型
    初始wondows系统
    深入.NET框架
    二至十五章总结
  • 原文地址:https://www.cnblogs.com/baicai37/p/13299362.html
Copyright © 2011-2022 走看看