满足两个要求,request.Post中才有值
1.请求头要求:
请求头中的Content-Type为application/x-www-form-urlencoded
2.数据格式要求
name=x&age=xx&gender=x
如:
a.form表单提交
<form methed..>
input
</form>
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 })
没有值情况二:请求头和数据格式都不对
$.ajax({ url:.. type:POST headers:{Content-Type:application/json} data:JSON.stringfy({name:xx,age=xx}) #{name:xx,age:xx} })
--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('用户列表')
全局配置
#解析器配置
'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): 下面两个是上传文件