遭遇しているトラブルの概要
初めてFlaskを使用してREST APIの学習用のコードを書いて試しています。
以下コード(抜粋)において、get_item()
関数内で find_item_by()
関数を呼び出しているコードを書いているのですが、なぜか find_item_by()
関数が呼び出されず困っています。
該当のソースコード
python
1def find_item_by(id): 2 return list(filter(lambda item: item["id"] == id, items)) 3 4@app.route('/items/', methods=['GET']) 5def get_items(): 6 return jsonify(items), 200 7 8@app.route('/items/<string:id>', methods=['GET']) 9def get_item(id): 10 11 item = find_item_by(request.form["id"]) 12 13 if not item: 14 abort(404) 15 16 return jsonify(item)
試したこと
get_items()
はきちんと動作しており、クライアントのWebブラウザにItems
の内容がきちんと表示されます。- クライアントからのリクエストに対する
get_item()
の呼び出しは成功しており、find_item_by()
の呼び出しの直前にprint('OK')
を記述すると、コンソールに「OK」が表示されます。 find_item_by()
関数内の先頭にprint('OK')
を記述したのですが、コンソールに「OK」が表示されないため関数が呼び出されていないようです。find_item_by()
関数呼び出しの部分を削除して、処理をインラインで記述すれば、問題なくクライアントに正しいItem
の内容が表示されます。- サーバー側ではエラー・メッセージは表示されていませんが、クライアント側は400の「Bad request」が表示されます。
- 該当のコード部分をFlaskではなく
main()
関数を書いた通常のスクリプトとしてファイルで実行すると、問題なく動作します。
当方PythonもFlaskも最近学習しだしたばかりで、わかっていないことがあるのかもしれませんが、ユーザー定義の関数が通常のファイルだと呼び出せて、Flask上だと呼び出せない理由が調べてもわかりませんでした。
どなたか何かわかりましたらアドバイスを頂けると幸いです。
補足情報(FW/ツールのバージョンなど)
Python 3.7.3
Flask 1.0.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/19 22:51
2019/06/19 22:59
2019/06/20 02:07