解析器
对请求的数据进行解析:是针对请求体进行解析的。表示服务器可以解析的数据格式的种类
# 如果是这样的格式发送的数据,在POST里面有值
Content-Type: application/url-encoding.....
request.body
request.POST
# 如果是发送的json的格式,在POST里面是没有值的,在body里面有值,可通过decode,然后loads取值
Content-Type: application/json.....
request.body
request.POST
form-data
就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件,在springmvc中可以使用MultipartHttpServletRequest接收通过api根据”name”获取不同的键值,也可以通过MulTipartFile数组接收多个文件。
x-www-form-urlencoded
就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,&分隔。 当form的action为get时,浏览器用x-www-form-urlencoded的编码方式,将表单数据编码为 (name1=value1&name2=value2…),然后把这个字符串append到url后面,用?分隔,跳转 到这个新的url。 当form的action为post时,浏览器将form数据封装到http body中,然后发送到server。 这个格式不能提交文件。
raw
可以上传任意格式的文本,可以上传text、json、xml、html等
binary
相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。
multipart/form-data与x-www-form-urlencoded区别
multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息;
x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。
视图
from rest_framework.parsers import FormParser, JSONParser, FileUploadParser, MultiPartParser
class ParserView(APIView):
def post(self, request, *args, **kwargs):
# print("body:", request.body.decode())
print("content_type:", request.content_type)
# 获取请求的值,并使用对应的JSONParser进行处理
print("data:", request.data)
# application/x-www-form-urlencoded 或 multipart/form-data时,request.POST中才有值
print("POST:", request.POST)
print("FILES:", request.FILES)
return HttpResponse('响应')
路由
path('parse/', views.ParserView.as_view(), name='parse-view')