前后端传输数据的编码格式---urlencoded,formdata, json这三种格式的详解

     阅读:21

0. 前后端传输数据的编码格式的总结

ps:我们只对request.POST进行介绍

1. urlencoded(Content-Type:application/x-www-form-urlencoded)

a. 格式(跟request.GET的参数非常像):

username=dbj&password=123&file=1755041963.jpeg.jpeg

b. 默认使用:

form表单&ajax,都默认的urlencode编码格式

c. django对urlencoded的处理:

django后端,针对符合urlencoded编码格式的数据,都会自动,帮你解析封装到request.POST中

d. django后端获取数据的模样:

<QueryDict: {'username': ['dbj'], 'password': ['123'], 'file': ['1755041963.jpeg.jpeg']}>

ps:补充QueryDict

a. 本质上继承了原生的dict

b. 字典能干的他都可以,字典不能干的,他基本上都不行

c. 就把他当成普通字典使用即可,中括号取值/赋值,get取值

2. formdata(Content-Type:multipart/form-data)

a. 格式

类似与二进制的格式(在浏览器上看不到)

b. 默认使用:

无,一般我们上传文件的时候,使用该编码格式,在form表单里面添加一个属性即可
enctype="multipart/form-data"

c. django对formdata的处理:

如果你把编码格式改成formdata,
那么针对普通的键值对,还是解析到request.POST中,而将文件解析到request.FILES中

d. django后端获取数据的模样:

<QueryDict: {'username': ['dbj'], 'password': ['123']}>
<MultiValueDict: {'file': [<InMemoryUploadedFile: 1755041963.jpeg.jpeg (image/jpeg)>]}>

ps:补充MultiValueDict

a. 类似于字典,但是只能get获取里面的文件

3. json

a. 格式

{"username": "dbj", "password": "123"}

b. 默认使用:

一般前后端进行分离开发的时候,使用该格式

c. django对json的处理:

django后端不会帮你处理json格式数据需要你自己去request.body获取并处理
在request.bdy里面取出来的是bytes类型的,需要自己手动解码,反序列化