【问题标题】:flask: request.json always returns none despite of sending valid json [duplicate]烧瓶:尽管发送有效的json,request.json总是不返回[重复]
【发布时间】:2020-06-27 00:54:57
【问题描述】:

我在服务器端有这个代码

from flask import Flask, request, jsonify

app=Flask(__name__)

@app.route("/pingtest")
def pingtest():
    return "Pong!"

@app.route("/registrar_alumno", methods=["POST"])
def registrar_alumno():
    print(request.json)
    return jsonify(request.json)

app.run(debug=True,port=4000)

在客户端我有这个代码

import requests

r=requests.post("http://127.0.0.1:4000/registrar_alumno",
    data={"test":"hello there"})
print(r.text)

我希望在双方都获得 {"test":"hello there"} 但我在服务器上有这个:

(支持)PS C:\Users\Alumno\Desktop\Proyectos\py\gestion_academica\asistencias> 蟒蛇.\server.py [...](服务器始终显示的无关消息)

无 #...(这应该是 print(request.json) 指令)

127.0.0.1 - - [15/Mar/2020 16:22:45] "←[37mPOST /registrar_alumno HTTP/1.1←[0m" 200 -

这个在客户端

(支持)PS C:\Users\Alumno\Desktop\Proyectos\py\gestion_academica\asistencias> python .\testclient.py

我不知道这是什么问题,我希望有人能帮助我找到错误

【问题讨论】:

  • 对不起,在客户端下面获取“null”而不是None
  • 我尝试了客户端 requests.post 函数:headers={"Content-Type":"application/json"} 但现在我有一个错误:

    无法解码 JSON 对象:期望值: 第 1 行第 1 列 (char 0)

  • 这里的格式使它有点难以阅读。您能否发布更多来自客户端和服务器的响应并使用 ``` 格式化?另外,您的 POST 请求确实生成了 200(成功响应)?
  • @JosefacundoBogado,您不能只传递标头,数据需要正确编码。使用json 参数而不是data
  • 谢谢,我知道这是一个愚蠢的问题,但由于某种原因,当我阅读了请求的文档时,我没有注意到这一点

标签: python json rest api flask


【解决方案1】:

发生这种情况是因为您在发送表单编码数据的客户端请求中使用带有字典的 data 参数,导致 request.json 返回 None

使用json参数发送JSON:

import requests

r=requests.post("http://127.0.0.1:4000/registrar_alumno", json={"test":"hello there"})

这会将数据序列化为 JSON 并将 Content-Type 标头更改为 application/json

请参阅more complicated POST requests 上的请求文档。

【讨论】:

  • 嗨,太好了,我找到了另一个解决方案,不是很好,我输入了 data=json.dumps({dict}) 并且它也有效,但你的答案显然是最正确的跨度>
猜你喜欢
  • 2021-02-22
  • 2012-12-22
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2019-05-03
  • 1970-01-01
  • 2013-11-18
相关资源
最近更新 更多