zoukankan      html  css  js  c++  java
  • 分页

    准备

    # app.models.py :数据层
    class Book(models.Model):
        name = models.CharField(max_length=20)
        price = models.DecimalField(max_digits=5, decimal_places=2)
    # objectjson.py :序列化
    class BookJson(serializers.ModelSerializer):
        class Meta:
            model = models.Book
            fields = '__all__'
            
    # urls.py 
    urlpatterns = [
        url(r'^books/', views.Books.as_view()),
    ]
    # views.py
    class Books(APIView):
        def post(self, request):
            list = []
            for i in range(1, 51):
                list.append(models.Book(name='第%s书' % i, price=i))
            models.Book.objects.bulk_create(list)
            return Response({
                'status': 0,
                'message': 'ok'
            })

    简单分页

    from rest_framework.pagination import PageNumberPagination
    class Books(APIView):
        authentication_classes = []
        permission_classes = []
        throttle_classes = []
    
        def get(self, request):
            # 没有分页的所有数据
            book_list = models.Book.objects.all()
            # 完成分页
            # 1)初始化分页对象
            page_simple = PageNumberPagination()
            # 2)配置分页对象
            # page_simple.page_size = api_settings.PAGE_SIZE
            # 一页显示的条数
            page_simple.page_size = 5
            # /books/?pages = 3 默认page
            page_simple.page_query_param = 'pages'
            # /books/?pages=3&line=10 用户可以自定义访问一页有多少数据
            page_simple.page_size_query_param = 'line'
            # 限制用户自定义一页最大访问的条数
            page_simple.max_page_size = 10
            # 3)操作分页后一页的数据
            book_page_list = page_simple.paginate_queryset(book_list,request,self)
            # 将一页的数据序列化后返回给前台
            book_data = objectjson.BookJson(book_page_list, many=True).data
            return Response({
                'status': 0,
                'message': 'ok',
                'results': book_data
            })

    偏移分页

    from rest_framework.pagination import LimitOffsetPagination
    class Books(APIView):
        authentication_classes = []
        permission_classes = []
        throttle_classes = []
        def get(self, request):
            # 没有分页的所有数据
            book_list = models.Book.objects.all()
            # 完成分页
            # 1)初始化分页对象
            page_limit = LimitOffsetPagination()
            # 2)配置分页对象
            # 一页显示的条数
            page_limit.default_limit = 5
            # 自定义一页获取的条数
            page_limit.limit_query_param = 'limit'
            # 从哪条数据开始查
            page_limit.offset_query_param = 'offset'
            # 自定义最大获取一页的条数
            page_limit.max_limit=8
            # 3)操作分页数据
            book_page_list = page_limit.paginate_queryset(book_list, request, self)
            # 将一页的数据序列化后返回给前台
            book_data = objectjson.BookJson(book_page_list, many=True).data
            return Response({
                'status': 0,
                'message': 'ok',
                'results': book_data
            })
           # return page_limit.get_paginated_response(book_data)  # 内部提供的Response对象

    游标分页

    from rest_framework.pagination import CursorPagination
    class Books(APIView):
        authentication_classes = []
        permission_classes = []
        throttle_classes = []
    
        def get(self, request):
            book_list = models.Book.objects.all()
            # 完成分页
            # 1)初始化分页对象
            page_cursor = CursorPagination()
            # 2)配置分页对象
            # 一页的条数
            page_cursor.page_size = 10
            # 排序的字段可以正向也可以反向
            page_cursor.ordering = 'id'
            # 游标的关键字
            page_cursor.cursor_query_param = 'cursor'
            # 3)操作分页数据
            book_page_list = page_cursor.paginate_queryset(book_list, request, self)
            book_data = objectjson.BookJson(book_page_list, many=True).data
    
            return Response({
                'status': 0,
                'message': 'ok',
                'previous': page_cursor.get_previous_link(),  # 上一页
                'next': page_cursor.get_next_link(),  # 下一页
                'results': book_data
            })
  • 相关阅读:
    Min_25 筛 学习笔记
    UOJ#172. 【WC2016】论战捆竹竿 字符串 KMP 动态规划 单调队列 背包
    Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造
    UOJ#407. 【IOI2018】狼人 Kruskal,kruskal重构树,主席树
    UOJ#218. 【UNR #1】火车管理 线段树 主席树
    Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包
    Codeforces 947F. Public Service 构造
    Pop Star 1.2.5
    TopCoder SRM704 Div1 800 构造
    Codeforces 1109E. Sasha and a Very Easy Test 线段树
  • 原文地址:https://www.cnblogs.com/ShenJunHui6/p/10899041.html
Copyright © 2011-2022 走看看