私は簡単な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...')
これは端末にメッセージを印刷します:
しかし、APIレスポンスでは500エラーレスポンスが返されません。
編集:
コードの構造は次のとおりです。
|--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
フレームワークが原因である可能性がありますが、このフレームワークについては詳しくありません。