[英](500 Internal Server Error])Flask Post request is causing the server Error [Flask]
[英]Flask POST request is causing server to crash
我正在嘗試在 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"
}
首先你要做的是啟用調試模式,這樣 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)
你在這! :)
服務器在您使用的端口上過載。 如果你有一個 linux 服務器,打印綁定到你的端口的進程,如下所示:
fuser 5000/tcp
這將殺死綁定到它的進程:
fuser -k 5000/tcp
你可以走了
1.首先你設置:
if __name__ == '__main__':
app.run(debug=TRUE)
2.服務器(默認)忙於進程,首先你終止該服務器上的進程:
您可以使用以下命令查看正在使用該端口的進程 ID(PIDS): netstat -o -a in command prompt。 在此處輸入以查看示例查看端口的相應 PID。
然后使用以下命令殺死您要使用的端口的所有進程(PIDS): Taskkill /PID 10324 /F
在這里,我將PID 10324用於端口 127.0.0.1:5000 ,這會導致過載錯誤。 那個問題解決之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.