python - 在 Django 中形成 POST 字典时,请求中的正文被忽略

标签 python 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/"

我在 View 中使用 PDB,这是我通过以下命令得到的结果:

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

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

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

最佳答案

您的发布请求正在发送 JSON 而不是 application/x-www-form-urlencoded

如果你看django docs about HttpRequest.POST .

一个类似字典的对象,包含所有给定的 HTTP POST 参数,前提是请求包含表单数据。请参阅下面的 QueryDict 文档。如果您需要访问请求中发布的原始或非表单数据,请通过 HttpRequest.body 属性访问。

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

curl -X POST -H“内容类型:application/x-www-form-urlencoded”-d“myInt=4”“http://0.0.0.0:8000/myURL/”

关于python - 在 Django 中形成 POST 字典时,请求中的正文被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23099868/

相关文章:

python - 使用python在脚本中创建一个文件

python - 如何在 asyncio 服务器中实现超时?

django - ManyRelatedManager 返回无

php - 我怎样才能使这个动态在 '2014-07-01 00:00:00' 和 '2014-07-31 23:59:59' 之间”;

javascript - 在 Django 中从 Javascript fetch 获取 HttpResponse

java - 如何向压缩的 HttpUrlConnection 写入 post 语句?

python - 我收到 TypeError : an integer is required (got type tuple) when trying to draw circle in cropped window

python - 计算 pandas dataframe 对象中每个唯一实体的值

python - django 模板包括

python - 无反向匹配错误。未找到 '...' 的反向