解析器作用
在我的视图类里能够控制前端传过来的数据格式,再对前端传过来的请求头 content-type数据格式进行解析,有application/json,x-www-form-urlencoded,form-data等格式
三种编码格式
-urlencoded:在body体中的格式是:name=zyl&age=18&wife=gaoyuanyuan
-formdata:在body体中的格式数据部分跟文件部分有区分
-json格式:在body体中就是json格式
json格式
urlencoded,formdata
现在限制就只能解析json格式,就要用到解析器
现点APIview找到解析器的固定名先给他写上去然后导入JSONParser
from rest_framework.parsers import JSONParser
点parsers进去如果不知道每个类代表什么可以点进去看这里
局部使用
全局使用
这个我们不自己配,他默认DEFAULT里面也已经给我们配好了三个,除非我们要限制只能解析JSON格式,
settings.py配置
REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES':[ 'rest_framework.parsers.JSONParser' 'rest_framework.parsers.FormParser' 'rest_framework.parsers.MultiPartParser' ] }
源码分析
解析器的入口是request里的data方法
点进去
media_type是解析类型,
每个类都有一个parse方法,这就是鸭子类型
源码流程:
-当调用request.data的时候去执行解析方法----》根据传过来的编码方式选择一个解析器对象,调用解析器对象的parser方法完成解析