zoukankan      html  css  js  c++  java
  • DRF解析器

    解析过程?

    前端请求的数据格式
    例如Json
    解析成Python才能用。
    本质是对请求体中的数据进行解析。

     解析原理?

    使用请求头中的Accept和ContentType
    Accept是告诉对方我能解析什么格式的数据
    ContentType是告诉对方我给你的是什么样的数据类型
    拿到请求的ContentType,根据ContentType找相应的解析器进行解析

    Django解析器与DRF解析器的区别?

    Django解析后的数据在request.GET和request.POST中
    Django的request是WSGIRequest类的对象  (from django.core.handlers.wsgi import WSGIRequest )

    WSGIRequest 类的POST属性(类似于

    @property
    def POST()

    request.POST --> _get_post
    request.POST=xx --> _set_post

    ):

     WSGIRequest 类的_get_post方法

     可以看出,Django不能解析Json格式的数据。

    通过request.GET和request.POST能解析的是' multipart/form-data '和' application/x-www-form-urlencoded '

     DRF的request是进一步封装的Request类对象,解析后数据在request.data中

     Request类的属性方法def data:

     Request类的方法_load_data_and_files:

     经过4步解析数据,然后返回parsed.data和parsed.files

    上面的第3步  self.negotiator在实例化的时候传参了

    self.parsers也一样,在配置文件中

    APIView的initialize_request方法

    APIView的get_content_negotiator方法

    从配置文件中获取

     

     DRF默认配置:

     接下来看select_parser方法:

    每个解析器类都有media_type,指定该解析器能解析的数据类型

     参数parers同样在初始化传参了:self.get_parsers

    APIView的get_parsers方法

     解析器在配置文件中:

     

    DRF默认配置的解析类,默认的解析器没有  ' rest_framework.parsers.FileUploadParser ' ,有需要可以加上

     

     第四步:使用找到的parser解析数据,parser类中必须实现parse方法

    DRF所有的解析器在:  from rest_framework import parsers

  • 相关阅读:
    企业网站常用中英文对照表
    AttachJSFunction(一个button同时挂两个onclick事件)
    Js 整理
    宝玉的CSS
    网页中一些比较隐蔽的用法 作者:wbc
    flex中flexgrow作用
    flex实现换行内容上下贴边效果
    flex中自动换行设置,以及上下间距的设置?
    flex中aligncontent和aliginitems区别?
    正则表达式语法及实例整理[转]
  • 原文地址:https://www.cnblogs.com/staff/p/12637426.html
Copyright © 2011-2022 走看看