2012-04-18 3 views
16

をクラッシュさせるサーバーを引き起こしています。 (私はちょうど今のためにそれを印刷したい)これは私のコードであると私はJSONデータを/ APIを要求したとき、それは500エラーを返します。なぜこれが起こっているのかについての考えはありますか?フラスコPOSTリクエストは、私が最初のステップは、POSTのJSONデータを取得している、フラスコ内のシンプルなAPIを作るしようとしています

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コマンド:

$ 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" 
} 

答えて

24

まず、あなたが何をしたいかは、フラスコが実際にエラーが何であるかを教えてくれますので、デバッグモードを有効です。 (そして、あなたはあなたのコードを変更するたびにリロードフラスコの追加利益を得る!)そして、我々は、エラーを見つける

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

:あなたはrequest.jsonを返している

TypeError: 'dict' object is not callable 

、あります辞書。最初に文字列に変換する必要があります。それはかなり簡単です:

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

ありがとうございます! :)

+1

デバッグモードは私に多くの時間を保存した:私はTrueに設定され、デバッグを有しているにも関わらず、私は、画面上のエラーメッセージを取得しないことを見つけるためにD –

+0

は、デバッグのために他の設定です。 – disruptive

+0

私は実際にすべてのエラーメッセージは、私は自分のサーバーを実行していた端子に出力したことに気づきました。しかし、デバッグモードは他のテストに役立つことが判明しました(そして、あなたがcurlコマンドを実行するところですぐに印刷されます) – alisa

関連する問題