要一直走下去

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

解析过程?

前端请求的数据格式
例如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

 

posted on 2020-04-05 15:24  要一直走下去  阅读(154)  评论(0编辑  收藏  举报