解析器是干什么的?因为前后端分离,前端可能采用json、xml、html等各种不同格式的内
容,后端必须要有一个解析器Parser
来解析前端发送过来的数据,也就是翻译器!否则后端凭什
么看懂前端的数据?对应地,后端也有一个渲染器Render
,和解析器是相反的方向,将后
端的数据翻译成前端能明白的数据格式。
- 解析器和渲染器在数据传输过程中的作用
前端数据 ==》解析器(解析成后端能处理数据) ==》 逻辑数据 ==》渲染器(渲染成前端需要的数据)==》前端展示
REST框架内置的Parser类
Django原生解析数据的限制
Django
原生的解析器对于post
的数据,如果要从request.body
中解析出来放到request.POST
中,
那么必须同时满足两个条件:
- 请求头部
Content_type = 'application/x-www-form-urlencoded'
- 数据格式必须是:
name=xxx&password=xxx&email=xxx.....
而对于前端发送过来的例如JSON
格式的数据则无法处理(当然你自己处理也是可以的)。
DRF内置的数据解析器
DRF
提供了一些额外的解析器帮我们处理各种格式。
DRF的parsers模块非常简单,只定义了几个解析器类:
-
BaseParser
:解析器基类,以下四个类都直接继承它 JSONParser
FormParser
MultiPartParser
FileUploadParser
DRF在运行的时候如何知道该使用哪个解析器呢?
DRF
将有效的解析器集定义为类的列表。当 request.data
被访问时,REST
框架将检查请求头
部的Content-Type
属性,以此来确定要使用哪个解析器来解析数据。
所以,要注意解析器只有在请求request.data
的时候才会被调用!如果不需要data
数据,那么
就不用解析。
网友评论