前回までで分析処理と結果の参照処理の実装が終わりました。次に結果一覧が参照できるトップページを作成しましょう。
Contents
一覧参照処理の実装
models.pyの修正
一覧参照のために、結果全件取得処理が必要となります。models.pyに以下の関数を追加してください。
def select_all(con): """ SELECTする """ cur = con.execute('select id, title, data, img, created from results order by id desc') return cur.fetchall()
resultテーブルの内容を全件取得して返します。
run.pyの修正
モデルの呼び出し処理をrun.pyに実装します。view関数を以下のように修正してください。
@app.route('/') def index(): """ 一覧画面 """ con = get_db() results = models.select_all(con) return render_template('index.html', results=results)
DBアクセスして取得した結果をテンプレートに渡します。
テンプレートの修正
一覧画面のテンプレートを修正します。run.pyから渡された値を表示するために、index.htmlを以下のように修正しましょう。
{% extends "base.html" %} {% block body %} <h1>分析一覧</h1> <a href="/create">新規分析</a> <table class="table table-striped table-hover"> <tr> <th>id</th> <th>title</th> <th>date</th> <th>操作</th> </tr> {% for result in results %} <tr> <td>{{ result.id }}</td> <td>{{ result.title|safe}}</td> <td>{{ result.created }}</td> <td> <a href="/view/{{ result.id }}"><button class="btn btn-primary">参照</button></a> <form action="/delete/{{ result.id }}" style="display: inline" method="post"> <input class="btn btn-danger" type="submit" value="削除" onclick='return confirm("削除しますがよろしいですか?")';> </form> </td> </tr> {% endfor %} </table> {% endblock %}
複数結果を表示するため、for文を使用しています。また、結果の削除処理のため、削除フォームにpkをhiddenで設定しています。
削除処理の実装
次に削除処理を実装しましょう。画面はありません。
models.pyの修正
DBのレコード削除処理を実装します。models.pyに以下を追記してください。
def delete(con, pk): """ 指定したキーのデータをDELETEする """ cur = con.cursor() cur.execute('delete from results where id=?', (pk,)) con.commit()
指定したidのレコードに対してdelete文を発行します。
run.pyの修正
delete処理を呼び出す処理を追加します。run.pyのdelete関数を以下のように修正してください。
@app.route('/delete/<pk>', methods=['POST']) def delete(pk): """ 結果削除処理 """ con = get_db() models.delete(con, pk) return redirect(url_for('index'))
削除処理の完了後、Top画面にリダイレクトします。
動作確認
お疲れ様です。これで一通りの機能が実装されました。一覧画面にアクセスして、登録したデータが表示されること、削除ができることを確認してください。
http://localhost:5000

今回ビジネスロジックに散布図行列を使いましたが、Pythonを使えば主成分分析やK-meansによるクラスター分析といった表計算ソフトで難しい分析処理を簡単にWeb上に実装することが可能です。みなさまも日々使用する処理のWeb化に挑戦してみてください。