Flaskの基礎 を読んだ人は、FlaskでWEBページを切り替える方法を理解できたと思います。それではもう少し実用的な、住所録アプリを作ってみましょう。
ソースコード
- app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# coding: utf-8 # いくつか関数が必要になるので import に追加してあります。 from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) # グローバル変数address_bookにデータを持ちます。 # [名前,住所]を要素とする二次元配列となります。 address_book = [] # 初期画面ではその時点での住所録データを表示します。 @app.route('/') def index(): # address_book=address_book によって現在のデータをHTMLテンプレートに渡します。 return render_template('index.html', page='menu', address_book=address_book) # 住所入力の画面を表示します。 @app.route('/input') def input(): return render_template('index.html', page='input') # 入力された住所データを受け取ります。 @app.route('/checkin', methods=['GET', 'POST']) def checkin(): try: if request.method == 'POST': name = request.form['name'] address = request.form['address'] else: name = request.args.get('name', '') address = request.args.get('address', '') except Exception as e: return str(e) # データをグローバル変数に保存します。 global address_book address_book = address_book + [[name, address]] # 初期画面に遷移します。 return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True) |
- index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<!--index.html--> <!DOCTYPE html> <html> <head> <title>Flask Sample</title> </head> <body> <h2>Flaskテスト</h2> {% if page == "menu" %} これはFlaskのテストです。</br> <table border="1"> <th>名前</th><th>住所</th> {% for record in address_book %} <tr> <td>{{ record[0] }}</td><td>{{ record[1] }}</td> </tr> {% endfor %} </table> <a href="/input">住所録を入力。</a> {% elif page == "input" %} <form method="POST" action="/checkin"> <div>名前:<input type="text" name="name"></div> <div>住所:<input type="text" name="address"></div> <input type="submit" value="送信"> <input type="reset" value="取消"> </form> {% else %} ここには来ないはずです。 {% endif %} </body> </html> |
1 2 3 4 5 6 7 8 |
<table border="1"> <th>名前</th><th>住所</th> {% for record in address_book %} <tr> <td>{{ record[0] }}</td><td>{{ record[1] }}</td> </tr> {% endfor %} </table> |
1 2 3 4 5 6 |
<form method="POST" action="/checkin"> <div>名前:<input type="text" name="name"></div> <div>住所:<input type="text" name="address"></div> <input type="submit" value="送信"> <input type="reset" value="取消"> </form> |
アプリケーションの実行
3つのファイルを以下のように配置してください。Flask以外に追加で必要なモジュールはありませんので、requirements.txt は以前のファイルがそのまま使えます。
1 2 3 4 5 |
app +-- app.py +-- requirements.txt +-- templates +-- index.html |
以前やったようにプログラムを実行してください。
1 2 3 4 5 |
$ cd app $ virtualenv sample_env $ source sample_env/bin/activate $ pip3 install -r requirements.txt $ python3 app.py |
localhost:5000 にアクセスして、いくつかデータを入力するとこのようになります。
コメント