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>

body.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 に答える
-1

1.まず、次のように設定します。

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

2.サーバー(デフォルト)はプロセスでビジーです。最初にそのサーバーでそのプロセスを終了します:

次のコマンドを使用して、そのポートを使用しているプロセス ID (PIDS) を確認できます:コマンド プロンプトで netstat -o -a 。ここに入力してサンプルを表示 ポートに対応する PID を調べます。

Taskkill /PID 10324 /F次に、次のコマンドを使用して、使用するポートのすべてのプロセス (PIDS) を強制終了します。その後、問題は解決されます。

于 2020-05-20T08:36:36.670 に答える