zoukankan      html  css  js  c++  java
  • day87

    分页器

    PageNumberPagination(普通分页器)

    说明:

      配置分页器的中最大显示个数(也可在setting中做全局配置)
        page.page_size = 2

    REST_FRAMEWORK = {
        # 每页显示两条
        'PAGE_SIZE': 2,
    }

      配置地址栏中的地址(http://127.0.0.1:8001/books/?page=2)对应最后的page
        page.page_query_param = 'page'
      指定当前页显示多少条
        page.page_size_query_param = 'size'
      限制最大页数
        page.max_page_size = 6

    class Book(ViewSetMixin, APIView):
        def get_all(self, request):
            db_books = models.Books.objects.all()
            page = PageNumberPagination()
            page.page_size = 2
            page.page_query_param = 'page'
            page.page_size_query_param = 'size'
            page.max_page_size = 6
            book_page = page.paginate_queryset(db_books, request, view=self)
            books_ser = myser.BookSerializers(book_page, many=True)
            return Response(books_ser.data)

    LimitOffsetPagination(偏移分页器)

    说明:

      每页显示的条数

        default_limit = api_settings.PAGE_SIZE

      标杆值

        offset_query_param = 'offset'

      往后偏移多少

        limit_query_param = 'limit'

      每页显示最大的条数

        max_limit = None

      注:要取的条数,如果超过了,还剩多少,就显示多少

    from rest_framework.pagination import LimitOffsetPagination
    
    class Book(ViewSetMixin, APIView):
        def get_all(self, request):
            db_books = models.Books.objects.all()
            page = LimitOffsetPagination()
            page.default_limit = 3
            page.offset_query_param = 'offset'
            page.max_limit = 3
            book_page = page.paginate_queryset(db_books, request, view=self)
            books_ser = myser.BookSerializers(book_page, many=True)
            return Response(books_ser.data)

    CursorPagination(加密分页器-查询速度很快)

    说明:

      按id排序

        page.ordering = 'nid'

      查询的key值

        cursor_query_param = 'cursor'

      每页显示多少条

        page_size = api_setting.PAGE_SIZE

    class Book(ViewSetMixin, APIView):
        def get_all(self, request):
            db_books = models.Books.objects.all()
            page = CursorPagination()
            # 设置根据数据库中哪个字段排序
            page.ordering = 'id'
            book_page = page.paginate_queryset(db_books, request, view=self)
            books_ser = myser.BookSerializers(book_page, many=True)
            # return Response(books_ser.data)
            return page.get_paginated_response(books_ser.data)
    

    使用总结:

      生成一个对象普通,偏移,加密)

        ***重点:可以修改对象的属性

      -ret = 对象.paginate_queryset(book_list,request,self)

      -丢到序列化类中,完成序列化

      -最后返回

    版本控制

      基于url的正则方式:URLPathVersioning(/v1/users/)

      基于url的get传参方式:QueryParameterVersioning(users?version=v1)

      基于 accept 请求头方式:AcceptHeaderVersioning(Accept: application/json; version=1.0)

    局部使用:

    versioning_class = URLPathVersioning
    

    全局使用:

    REST_FRAMEWORK = {
        'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
        'DEFAULT_VERSION': 'v1',            # 默认版本(从request对象里取不到,显示的默认值)
        'ALLOWED_VERSIONS': ['v1', 'v2'],   # 允许的版本
        'VERSION_PARAM': 'version'          # URL中获取值的key
    }
    

    URLPathVersioning示例

    路由配置:

    urlpatterns = [
            url(r'^(?P<version>[v1|v2]+)/books/', views.Book.as_view({'get': 'get_all'}), name='ttt'),
    ]    
    

    视图函数:

    from rest_framework.versioning import URLPathVersioning
    
    class Book(ViewSetMixin, APIView):
        versioning_class = URLPathVersioning
        def get_all(self, request, version):
            db_books = models.Books.objects.all()
            print(request.version)
            reverse_url = request.versioning_scheme.reverse('ttt', request=request)
            print(reverse_url)
            page = PageNumberPagination()
            page.max_page_size = 6
            book_page = page.paginate_queryset(db_books, request, view=self)
            books_ser = myser.BookSerializers(book_page, many=True)
            return page.get_paginated_response(books_ser.data)
  • 相关阅读:
    centOS和windows7双系统下重装windows后恢复centOS引导
    第一天
    Spring初学
    myBatis-一级缓存与二级缓存
    myBatis-类型关联
    myBatis-智能标签
    myBati初学
    myBati初学
    博客系统开发
    Y2分班考试 笔试题总结
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/10139848.html
Copyright © 2011-2022 走看看