解析器分类:

  1. JSONPaser ----> 解析 JSON-serialized data (解析JSON序列化的数据)

  2.FormParser ---->解析form 表单中 urlencoded格式数据(application/x-ww-form-urlencoded)

  3.MartiPartParser---->解析 form 表单中 form-data 格式数据(Multipart/form-data)

  4.FileUploadParser---> 解析 '*/*',(Parser for file upload data.)

源码中的解析器

 

  • 展开源码你会发现,每个解析器下面都会定义一个 解析方法(这是一种面向对象的鸭子类型的体现)。

  • 前端传过的数据以及文件,在后端被使用的时候(request.data,request.FILES)时候解析器才执行解析。所以解析器执行的入口是 request.data or request.FILES

源码部分:

  

 

执行流程(以JSON 格式数据为例)

复制代码
"""
-->1.request.data
-->2.执行request.data 中的 self._load_data_and_files()
-->3.执行self._load_data_and_files() 中的 self._data, self._files = self._parse()
-->4. 执行self._parse() 
    -->4.1.执行stream = self.stream-->self._load_stream() 获取请求内容
    -->4.2 执行parser = self.negotiator.select_parser(self, self.parsers)获取解析器
        -->4.2.1 执行 self.negotiator = negotiator or self._default_negotiator()
        --> 如果没有传 就去 配置文件中找api_settings.DEFAULT_CONTENT_NEGOTIATION_CLASS()
    -->4.3 执行 parsed = parser.parse(stream, media_type, self.parser_context) 返回通过不同解析器解析出来的被解析对象
    -->4.4 返回  
"""
View Code
复制代码

 

posted on   QzkRainPig  阅读(159)  评论(0编辑  收藏  举报
努力加载评论中...

点击右上角即可分享
微信分享提示