• DRF分页,解析器,跨域。


    一:DRF提供的种分页类。

    from  rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination

          1:PageNumberPagination,按页数分页,第几页第几条 

          2:LimitOffsetPagination, 按游标分页。当前第几条,向后查看第几条

          3:CursorPagination,加密游标分页,记住上一页和下一页的ID

    二:PageNumberPagination 类的使用

        1:自定义类

           --导入类

           --设置部分参数

    from  rest_framework.pagination import PageNumberPagination
    class  MyPageNumber(PageNumberPagination):
        page_size = 2  # 每页显示多少条
        page_size_query_param = 'size'  # URL中每页显示条数的参数
        page_query_param = 'page'  # URL中页码的参数
        max_page_size = None  # 最大页码数限制
    

     2:使用

    from  rest_framework.views import APIView
    from .models import Book
    from .serializers import BookSerializers
    from utils.pages import MyPageNumber
    class  BookView(APIView):
        def  get(self,request):
            # 需要分页的对象
            book_list =Book.objects.all()
            # 实例化分页器
            page_obj = MyPageNumber()
            #调用分页方法
            page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
            #序列化分页对象 且返回上一页和下一页的链接。
            ret = BookSerializers(page_article, many=True)
            # print(page_obj.get_paginated_response(ret.data))
            return page_obj.get_paginated_response(ret.data)  

    三:LimitOffsetPagination

       1:自定义分页类

    from  rest_framework.pagination import LimitOffsetPagination
    class  MyPageNumber(LimitOffsetPagination):
        '''
        url  :http://127.0.0.1:8088/books/?limit=2&offset=5
        '''
        default_limit = 3   #默认向后找的条数 默认1
        limit_query_param = 'limit'    #往后找几条  key (这里设置的和默认值相同)
        offset_query_param = 'offset'   #从第几条数据往后找
        max_limit = 999      #最大能找多少条
    

     2:使用和PageNumberPagination相同

    四:CursorPagination

      1:自定义分页类

    from  rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
    class  MyPageNumber(CursorPagination):
        cursor_query_param = 'cursor'
        page_size = 1           #没有多少条数据
        ordering = '-id'       #支持按字段排序,id倒序
    

     2:使用方式一样  

    五:Django解析器和DRF解析器的区别

        1:Django解析器

          a:解析form表单,存储在request.POST中。

          b:可以解析文件,存储在request.FILES中。  

        c:不能解析json文件,只能通过json手动处理

       2:DRF解析器

           --可以解析文件,json,form表单数据。数据均存储在request.data中

    六:跨域   

        https://www.cnblogs.com/GGGG-XXXX/articles/9893381.html

  • 相关阅读:
    git命令log与reflog的比较
    git基础仓库提交到新仓库,保存老仓库历史,并同步老仓库跟新到新仓库中
    classpath*与classpath
    fastjson将对象和json互转,@JSONField的使用及不生效
    feign接口自动生成工具
    IIS .Net Core 413错误和Request body too large解决办法
    thinphp 上传文件到七牛
    php 整合微信、支付宝扫码付款
    Jenkins:整合SonarQube8
    Jenkins:流水线打包运行boot项目
  • 原文地址:https://www.cnblogs.com/yingjp/p/10633542.html
Copyright © 2020-2023  润新知