首页 > 解决方案 > flask:request.json 总是不返回任何内容,尽管发送了有效的 json

问题描述

我在服务器端有这个代码

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"} 但我在服务器上有这个:

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

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

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

这在客户端

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

没有任何

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

标签: pythonjsonrestapiflask

解决方案


发生这种情况是因为您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.

请参阅有关更复杂的 POST 请求的请求文档。


推荐阅读