web-dev-qa-db-ja.com

flask apiの応答として400エラーを返します

私は簡単なflaskというアプリを作成し、pythonからの応答を次のように読んでいます。

response = requests.post(url,data=json.dumps(data), headers=headers ) 
data = json.loads(response.text)

現在、私の問題は、特定の条件下で400または500のメッセージ応答を返したいということです。これまでのところ、私は次のようにしています:

abort(400, 'Record not found') 
#or 
abort(500, 'Some error...') 

これは端末にメッセージを印刷します:

enter image description here

しかし、APIレスポンスでは500エラーレスポンスが返されません。

enter image description here

編集:

コードの構造は次のとおりです。

|--my_app
   |--server.py
   |--main.py
   |--swagger.yml

Server.pyにこのコードがある場合:

from flask import render_template
import connexion
# Create the application instance
app = connexion.App(__name__, specification_dir="./")
# read the swagger.yml file to configure the endpoints
app.add_api("swagger.yml")
# Create a URL route in our application for "/"
@app.route("/")
def home():
    """
    This function just responds to the browser URL
    localhost:5000/

    :return:        the rendered template "home.html"
    """
    return render_template("home.html")
if __name__ == "__main__":
    app.run(Host="0.0.0.0", port="33")

そして、main.pyには、APIエンドポイントに使用しているすべての関数があります。

例えば:

def my_funct():
   abort(400, 'Record not found') 

My_functが呼び出されると、ターミナルに「レコードが見つかりません」というメッセージが表示されますが、API自体からの応答には表示されません。常に500メッセージエラーが表示されます。

abort()関数を正しく使用していると思います。ここでの問題は、エラーハンドラーが400エラーをキャッチし、その後エラーが発生して500エラーが発生することであると考えています。 flaskエラー処理の詳細については こちら を参照してください。

例として、次は400を500エラーに変更します。

@app.errorhandler(400)
def handle_400_error(e):
    raise Exception("Unhandled Exception")

エラー処理を行わない場合は、connexionフレームワークが原因である可能性がありますが、このフレームワークについては詳しくありません。

0
Tim Ludwinski