前回の「Flask」を使用して”Hello World”を表示しましたが、今回は少しだけ動きのあるWebページを作成していきたいと思います。
今回対象となるファイルの配置は以下のようになります。
1 2 3 4 |
flask └── templates | └── search.html (1) └── search.py (2) |
(1) テンプレート「search.html」
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <title>商品検索</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h2></h2> <form action="/result" method="POST"> <p>商品:<input type="text" name="item" size="30"></p> <p><input type="submit" value="入力"></p> </form> </body> </html> |
⇒8~11行目のformタグに、送信先のアドレス”/result”を指定し、商品のname属性を”item”とします。
(2) search.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from flask import Flask, render_template from flask import request app = Flask(__name__) @app.route("/search") def search(): renderpage = render_template("search.html") return renderpage @app.route("/result", methods=['POST']) def result(): item = request.form['item'] items = [('キャベツ', 200), ('にんじん', 100), ('牛乳', 178), ('もやし', 50)] price = '未登録' for row in items: if row[0] == item: price = str(row[1]) + '円' return '<p>「{0}」は{1}です。</p>'.format(item, price) if __name__ == "__main__": app.run(debug=True) |
⇒7~9行目のsearchメソッドでは、テンプレート「search.html」より入力画面を表示します。
⇒12~19行目のresultメソッドでは、入力画面からの”item”を取得し、商品リスト(items)の検索します。その後、結果画面を表示します。
動作結果は以下のようになります。
もし、なければ価格表示を”未登録”とします。
商品リストをベタ書きしているため、別の機会でリスト以外で取り扱う方法を試してみたいと思います。
以上です。