【问题标题】:Django not sending correct json responseDjango没有发送正确的json响应
【发布时间】:2019-10-06 00:07:10
【问题描述】:

我已经建立了一个简单的项目,当发出一个发布请求时,它会根据用户输入的值返回一个响应。

我正在 postman 中测试我的 api 逻辑。

此刻,无论我输入什么值,都会返回相同的 json 响应。这不是预期的逻辑。

views.py:

def function(request):
    if request.method == 'POST':
        if request.POST.get("number") == 1:
            print("Number is 1")
            return JsonResponse({'message':'Number is 1'})
        else:
            print("Number is not 1")
            return JsonResponse({'message':'Number is not 1'})

即使number的值等于1,也会返回消息:Number is not 1。

邮递员请求:

{
    "number": 1
}

谢谢。

【问题讨论】:

  • request.POST.get("number") == "1",不是1,而是"1"
  • 嘿@RossRodgers,我尝试将我的数据作为数字和字符串输入,检查我的帖子,我已经更新了。谢谢。
  • 你能在你的函数的开头添加一个print(request.POST) 并向我们展示结果吗?
  • 嘿@CalebGoodman 结果是:
  • @ToanQuocHo 需要使用request.body的经典案例。 request.POST 仅用于您自己的视图,而不用于 webhooks/postman。

标签: json django http


【解决方案1】:

来自docs:

如果您需要访问请求中发布的原始或非形式数据,请改为通过 HttpRequest.body 属性访问。

由于您发送的数据是“非形式”数据,因此您需要改用request.body:

import json

def function(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        if data.get("number", 0) == 1:
            print("Number is 1")
            return JsonResponse({'message':'Number is 1'})
        else:
            print("Number is not 1")
            return JsonResponse({'message':'Number is not 1'})

【讨论】:

  • 嘿@CalebGoodman,我尝试将我的数据输入为数字和字符串,检查我的帖子,我已经更新了。谢谢。
  • 嘿@CalebGoodman 谢谢兄弟,这已经解决了问题。一行中的一个问题: data.get("number", 0) 为什么要使用第二个参数,它的目的是什么?
  • @nazam007 这是一个默认参数,以防data 没有number 关键字。如果您在key 不存在时尝试运行data.get('key'),则会收到错误消息,除非.get 有默认值。
猜你喜欢
  • 2017-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2022-08-16
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多