【问题标题】:Django POST data in request.body but can not store in variableDjango POST 数据在 request.body 中,但不能存储在变量中
【发布时间】:2017-08-27 22:21:59
【问题描述】:

我将一些原始 JSON 发布到我的后端

{
    "access_token": "hU5C7so4reJOYTzPyhKPs8PWq07tb",
    "id": 3,
    "order_details": [{"meal_id": 1, "quantity": 3}, {"meal_id": 2, "quantity": 2}]
}

但是当我尝试

print (request.POST.get("access_token")) 

我收到None

但是,当我这样做时

print (request.body)

价值观似乎在那里: b'{\n\t"access_token": "hU5C7so4reJOYTzPyhKPs8PWq07tb",\n\t"id": 3,\n\t",\n\t"order_details": [{"meal_id": 1, "quantity": 3}, {"meal_id": 2, "quantity": 2}]\n}'

我正在使用 Postman 发布数据。

我想将访问令牌存储到一些变量中,如下所示:

access_token = request.POST.get("access_token")

与帖子数据

我对 Django 还是很陌生,任何帮助都会很棒。

【问题讨论】:

  • Django 不知道您发布的是 JSON 或任何其他格式。您需要对获得的数据进行解码。谷歌起来json.loads

标签: python django


【解决方案1】:

Request.POST 在您发送表单数据时被填充。 有关详细信息,请参阅 django docthis answer。 由于在您的情况下,您发布的是“普通”json,因此您将在 request.body 下找到您的有效负载。 您可以将正文从二进制解码为字典,如下所示:

import json

body = json.loads(request.body.decode('utf-8'))
access_token = body.get("access_token")

【讨论】:

  • 解释一下为什么这个答案比其他答案有所改进会有所帮助。
【解决方案2】:

只做一个 json.loads 就可以了。

import json

json_data = json.loads(request.body)

【讨论】:

  • body 需要解码。否则你会得到 TypeError: the JSON object must be str, not 'bytes'
【解决方案3】:

你需要先解码json:

import json
variable = urlopen(request).read().decode('utf-8')
json_obj = json.loads(variable)

然后您可以检索您的信息

for i in json_obj:
   token = i['access_token']
   order_details = i['order_details']

希望有帮助

【讨论】:

  • 这与这个用例无关,它是一个接收 POST 请求的后端端点。
猜你喜欢
  • 2018-08-13
  • 2016-07-23
  • 2017-06-29
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2022-06-29
相关资源
最近更新 更多