rest_framework-解析器-总结完结篇

感谢alex和武老师
前戏: Djaogo对请求体只支持 application/x-www-form-urlencoded请求头以及name=alex&age=18的数据格式
django.request.POST/ request.body
1. 请求头要求
Content-Type: application/x-www-form-urlencoded
PS:如果请求头中的 Content-Type:application/x-www-form-urlencoded, request.POST中才有值(去request.body里面解析数据)

2.数据格式要求:
name=alex&age=18&gender=男

如:
a. form表单提交
<form method..>
input...
</form>

b. ajax提交
$.ajax({
url:...
type:POST,
data:{name:alex, age=18}
})

#自定义请求头

$.ajax({
url:...
headers:{'Content-Type':"application/json"}
data:{name:alex, age=18} #内部转化 name=alex &age=18
})
#body有值, POST无

$.ajax({
url:...
type:POST,
headers('Content-Type':'application/json)
data:JSON.atringfy({name:alex,age=18}) #{name:alex,age:18}
})
#body有值, POST无值
获取数据的话 json.loads(request.body)


rest_framework解析器, 对请求体数据进行解析

from rest_framework.parsers import JSONParser,FormParser

class ParseView(APIView):
"""
JSONParser:表示解析content-type:application/json头 常用这个
FormParser:表示解析application/x-www-form-urlencoded
"""
parser_classes = [JSONParser,FormParser]
def post(self, request, *args, **kwargs):
"""
允许用户发送JSON格式数据
a. content-type:application/json
b.{'name':'alex', 'age':18}

1.获取用户请求
2.获取用户请求体
3.获取用户请求头和parser_classes = [JSONParser, FormParser,]
4. JSONParser对象请求体
5.request.data
"""
#获取解析后的结果
print(request.data)
return HttpResponse('ParserView')

全局配置:
REST_FRAMEWORK = {
"DEFAULT_PARSER_CLASSES":['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser']
}

后期通过request.data传值

如果是上传
from rest_framework.parsers import FileUploadParser
原文地址:https://www.cnblogs.com/Liang-jc/p/9392933.html