在Django中形成POST dict时,请求中的Body被忽略

时间:2014-04-16 04:15:35

标签: python django post

我正在使用一个从POST数据获取整数的Django服务器。如果我通过GET发送整数没有问题,但是当它通过POST发送时会被丢弃。

我用:

运行服务器
./manage.py runserver 0.0.0.0:8000

然后使用以下命令生成POST请求:

curl -X POST -H "Content-Type: application/json" -d '{"myInt":4}' "http://0.0.0.0:8000/myURL/"

我在视图中使用PDB,这是我得到以下命令的结果:

request.method
> 'POST'
request.body
> '{"myInt":4}'
request.POST
> <QueryDict: {}>

我使用@csrf_exempt作为视图的装饰器,只是为了确保不会导致任何问题。

目前令人困惑的是request.POST不包含myInt,我的POST请求是不是格式正确?

1 个答案:

答案 0 :(得分:2)

您的帖子请求是发送JSON而不是application / x-www-form-urlencoded

如果你看django docs about HttpRequest.POST

A dictionary-like object containing all given HTTP POST parameters, providing that the request contains form data. See the QueryDict documentation below. If you need to access raw or non-form data posted in the request, access this through the HttpRequest.body attribute instead.

您需要POST表单编码数据。我没有对此进行测试,并且暂时没有使用curl,但我相信以下内容应该有效。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "myInt=4" "http://0.0.0.0:8000/myURL/"