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)
  • 相关阅读:
    codevs 1792 分解质因数
    ScrollView嵌套ViewPager,ViewPager内容不显示问题
    AndroidStudio不重新运行,Debug调试已有进程
    Android进阶之Fragment与Activity之间的数据交互
    Android修改包名的方法,简单粗暴。
    android studio 按钮运行按钮后,不弹出选择运行模拟器的对话框
    RGB颜色值与十六进制颜色码转换工具
    Android Studio查看其它APP的布局结构
    android实现多条件筛选列表菜单筛选菜单
    Android,一条线串联实心圆布局
  • 原文地址:https://www.cnblogs.com/baicai37/p/13299362.html
Copyright © 2011-2022 走看看