为什么JSON编码的POST数据出现在raw_post_data中而不出现在POST中

时间:2014-11-19 06:02:56

标签: python django

我可以使用django' s request.POST解析以下内容:

>>> r = requests.POST(url, data={'name': 'david'})

# in view
name = request.POST.get('name') # 'david'

但是,如果我将这些数据编码为json,我无法得到它,我必须使用request.body

>>> r = requests.POST(url, data=json.dumps({'name': 'david'}))

# in view
name = request.POST.get('name') # empty string
name = request.body.get('name') # 'david'

为什么django如果在json中解析POST数据呢?

1 个答案:

答案 0 :(得分:1)

request.POST用于访问传统的html表单数据,request.body用于所有其他格式(xml,json等)。 raw_post_data在较新的django版本中已弃用,其后续版本为request.body。此外,即使通过request.body访问它,也必须反序列化传入的json数据,例如:json.loads(request.body)

在官方文档中可以找到有关HttpRequest.bodyHttpRequest.POST的更多信息: https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.body