「Django」rest_framework学习系列-解析器

满足两个要求,request.Post中才有值
1.请求头要求:
请求头中的Content-Type为application/x-www-form-urlencoded
2.数据格式要求
name=x&age=xx&gender=x
如:
a.form表单提交

<form methed..>
  input
</form>
View Code

b.ajax提交

$.ajax({
    url:..
    type:POST
    headers:{Content-Type:application/json}
    data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
})

没有值情况一:请求头不是规定格式,body有值,POST没值

$.ajax({
    url:..
    type:POST
    headers:{Content-Type:application/json}
    data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
})
View Code

没有值情况二:请求头和数据格式都不对

$.ajax({
    url:..
    type:POST
    headers:{Content-Type:application/json}
    data:JSON.stringfy({name:xx,age=xx}) #{name:xx,age:xx}
})
View Code

--rest_framework解析器 对请求数据进行解析

from rest_framework.parsers import JSONParser,FormParser

class ParserView(APIView):
    parser_classes = [JSONParser,FormParser]
    #JSONParser表示只能解析content-type:application/json头
    #FormParser表示解析content-type:application/x-www-form-urlencoded头
    def post(self,request,*args,**kwargs):
        '''parser_classes = [JSONParser]
        允许用户发送JSON格式数据
        a.content-type:application/json
        b.{'name':xx,age:xx}
        '''
        #获取解析后的结果
        print(request.data)
    return HttpResponse('用户列表')
View Code

全局配置
#解析器配置

'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser']
解析后的数据需要在request.data中去取值
即request._request.POST.get('xxx')替换为request.data.get('xxx')
class JSONParser(BaseParser):
class FormParser(BaseParser):
class MultiPartParser(BaseParser):
class FileUploadParser(BaseParser):
下面两个是上传文件
原文地址:https://www.cnblogs.com/wrxblog/p/10402568.html