28

我正在尝试在 Flask 中制作一个简单的 api,第一步是获取 POST json 数据。(我现在只想打印它)这是我的代码,当我使用 json 数据请求 /api 时,它返回 500 错误。关于为什么会发生这种情况的任何想法?

from flask import Flask, request, Response
app = Flask(__name__)

@app.route('/')
def root_response():
    return "Hello World."

@app.route('/api', methods=['POST', 'GET'])
def api_response():
    if request.method == 'POST':
        return request.json

if __name__ == '__main__':
    app.run()

卷曲命令:

$ curl -H "Content-Type: application/json" --data @body.json http://127.0.0.1:5000/api
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

身体.json:

{
"please": "print",
"me": "now"
}
4

4 回答 4

47

首先你要做的是启用调试模式,这样 Flask 就会告诉你错误是什么。(每次修改代码时,您都会获得重新加载烧瓶的额外好处!)

if __name__ == '__main__':
    app.debug = True
    app.run()

然后我们发现我们的错误:

TypeError: 'dict' object is not callable

您正在返回 request.json,它是一个字典。您需要先将其转换为字符串。这很容易做到:

def api_response():
    from flask import jsonify
    if request.method == 'POST':
        return jsonify(**request.json)

你在这!:)

于 2012-04-18T23:33:39.990 回答
4

服务器过载是因为默认端口(5000)或用户明确提到的端口(例如:app.run(port=7000))可能正在后台使用其他一些进程,所以我们需要杀死正在运行的进程由该端口使用。

您可以使用以下命令查看正在使用该端口的进程 ID(PIDS): netstat -o -a in command prompt 在此处输入图像描述 *查看端口的相应 PID

然后使用以下命令杀死您要使用的端口的所有进程(PIDS): Taskkill /PID 30832 /F 在这里,我将 PID 30832 用于端口 127.0.0.1:7000,这会导致过载错误。在那个问题解决之后。

于 2018-07-16T14:01:31.777 回答
0

服务器在您使用的端口上过载。如果你有一个 linux 服务器,打印绑定到你的端口的进程,如下所示:

fuser 5000/tcp

这将杀死绑定到它的进程:

fuser -k 5000/tcp

你可以走了

于 2022-01-10T13:36:31.267 回答
-1

1.首先你设置:

if __name__ == '__main__':
app.run(debug=TRUE)

2.服务器(默认)忙于进程,首先你终止该服务器上的进程:

您可以使用以下命令查看正在使用该端口的进程 ID(PIDS):netstat -o -a in command prompt。 在此处输入以查看示例 查看端口的相应 PID。

然后使用以下命令杀死您要使用的端口的所有进程(PIDS):Taskkill /PID 10324 /F这里我使用了端口127.0.0.1:5000的PID 10324 ,这给出了过载错误。那个问题解决之后

于 2020-05-20T08:36:36.670 回答