SQLiteによる簡単なデータベースを使用し,Flaskで表を作成する方法について.
目次
- スクリプト
- データベース
- テンプレート
- 異なる階層で処理する場合
スクリプト
from flask import Flask, render_template, request, g import sqlite3
app = Flask(__name__)
def get_db(): if 'db' not in g: g.db = sqlite3.connect('my_db.db') return g.db
@app.route('/', methods=['GET', 'POST']) def index(): conn = get_db() if request.method == 'GET': return render_template('my-list.html') elif request.method == 'POST': my_post = request.form["my_post"] cur = conn.execute("SELECT id, price FROM mytable") data = cur.fetchall() conn.close() return render_template('my-list.html', my_post = my_post, data = data) if __name__ == "__main__": app.debug = True app.run(host='0.0.0.0')
|
データベース
スクリプトでimport sqlite3
としている通り,データベースをSQLiteで作成.
ここでの仮のデータベースはmy_db.db,テーブルをmytableとしている.
テンプレート
Flaskで用いるHTMLファイルのテンプレートはtemplatesフォルダに配置する.
ここではmy-list.htmlとする.
<!DOCTYPE html> <html lang="ja"> <head> </head> <body> <h1>表作成</h1> <p> 検索ボックスに品番を入力ください.<br> 対応する価格を検索します. </p> <form action="/" method="post"> <input type="text" name="my_post" value="事前に入っている値"> <input type="submit" value="検索"> </form> <h2>{{ my_post }}</h2> {% if data %} <table border="1"> <thead> <tr> <th>品番</th> <th>価格</th> </tr> </thead> <tbody> {% for item in data %} <tr> <td>{{item[0]}}</td> <td>{{item[1]}}</td> </tr> {% endfor %} </tbody> </table> {% endif %} </body> </html>
|
スクリプト中のrender_template
が,表の作成を動的に処理してくれる.
- スクリプトから
my_post
とdata
が代入される.
- マスタッシュ記法で書かれた
{{ my_post }}
により,フォームに入力した値を(スクリプトを経由して)表示している.
{% for item in data %}` 〜 `{% endfor %}
は検索結果を反復して呼び出し,行を追加する.
{% if data %}` 〜 `{% endif %}
により,検索結果がヒットしたときのみ表を作成する.
異なる階層で処理する場合
ルートを/
から次のように/dir/
に変更する.
@app.route('/dir/', methods=['POST'])
|
テンプレートでは,
<form action="/" method="post">
|
を
<form action="/dir/" method="post">
|