Django中POST字典形成时请求体被忽略
我正在开发一个Django服务器,它会从POST数据中获取一个整数。如果我通过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 个回答
2
你的请求是发送JSON格式的数据,而不是application/x-www-form-urlencoded格式。
如果你查看一下Django文档中关于HttpRequest.POST的部分,你会看到:
这是一个类似字典的对象,里面包含了所有通过HTTP POST发送的参数,前提是请求中包含表单数据。想了解更多,可以查看下面的QueryDict文档。如果你需要访问请求中原始的或非表单的数据,可以通过HttpRequest.body属性来获取。
你需要发送表单编码的数据。我没有测试过这个,也有一段时间没用curl了,但我相信下面的命令应该可以工作。
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "myInt=4" "http://0.0.0.0:8000/myURL/"