ここでは分析ツールの雛形をダウンロードし環境を構築してみましょう。
Contents
環境構築
プロジェクト構成
適当なディレクトリの下に、以下のzipファイルをダウンロードして解凍してください。
2018/4/21追記 schema.sqlが漏れておりました。下記リンクからダウンロードしてください。(ご指摘くださった方ありがとうございます。)
flask_init_sample
解凍するとプロジェクトの雛形が配置されます。構成は以下のとおりとなります。Pythonファイルがたった2つしかないことに着目してください。
flask_sample ├── models.py ├── requirements.txt ├── run.py ├── schema.sql ├── static │ ├── result │ └── style.css └── templates ├── base.html ├── edit.html ├── index.html └── view.html
ファイル、ディレクトリの解説
簡単にですが、ファイルとディレクトリの説明をします。
run.py
Webアプリケーションを起動するモジュールです。URLごとに処理のルーティングを行います。Webアプリケーションとしてflaskが関わるのはこのモジュールのみとなります。ページ下部でもう少々細かく説明します。
models.py
ビジネスロジックのモジュールです。分析処理(散布図行列の生成)とDBアクセスを行います。
schema.sql
データベースのテーブル定義を記述しています。
requirements.txt
pipでインストールする対象モジュールです。
static
cssなどの静的ファイルを配置するディレクトリです。また、配下のresultディレクトリには分析で作成したグラフの画像データを格納します。
templates
テンプレート(htmlの雛形)を配置するディレクトリです。テンプレートは親子関係があり、base.htmlが共通となる親テンプレート、それ以外が子テンプレートとなります。
必要なモジュールのインストール
matplotlibを使用しますので、Ubuntの方は以下でTkinterをインストールしておいてください。
sudo apt install python-tk tk-dev
pipで必要なモジュールをインストールします。
pip install -r requirements.txt
使用する主なモジュールは以下のとおりです。
- flask
- pandas
- matplotlib
- scipy
データベースの構築
sqlite3コマンドが使用できることを前提とします。以下のコマンドを実行すると、sqlite3のデータベースファイルが作成されます。
sqlite3 db.sqlite3 < schema.sql
テーブルレイアウトは以下の通りとなります。
カラム | 型 | 内容 |
---|---|---|
id | integer | 主キー |
title | text | タイトル |
data | text | 分析対象となるデータ内容 |
img | text | 画像出力パス |
created | datetime | 作成日時 |
flaskとURLルーティング
Webアプリケーションの主軸となるrun.pyについてもう少し説明させてください。ダウンロードしたソースコードを見てみましょう。
import os from flask import Flask, redirect, url_for, render_template app = Flask(__name__) app.config.from_object(__name__) app.config.update(dict( DATABASE=os.path.join(app.root_path, 'db.sqlite3'), SECRET_KEY='foo-baa', )) @app.route('/') def index(): """ 一覧画面 """ return render_template('index.html', results={}) @app.route('/create') def create(): """ 新規作成画面 """ return render_template('edit.html') @app.route('/analysis', methods=['POST']) def analysis(): """ 分析実行処理 """ return redirect(url_for('view', pk=0)) @app.route('/delete/<pk>') def delete(pk): """ 結果削除処理 """ return redirect(url_for('index')) @app.route('/view/<pk>') def view(pk): """ 結果参照処理 """ return render_template('view.html', result={}) if __name__ == '__main__': app.run()
app.config.updateでflaskの設定を行うことができます。データベース接続情報と、セッションに利用する鍵の定数設定を行っています。
12行目以下のindex、create、analysis、delete、viewはWebアプリケーションの画面や処理に対応する関数です。
@app.routeデコレータでURLと関数のひも付けによりルーティングを行うことができます。本講座でのURLと関数の対応は以下のとおりとなります。
URL | 関数 | 画面/機能 | メソッド |
---|---|---|---|
/ | index | Top画面(結果一覧) | GET/POST |
/create | create | 新規分析作成画面 | GET/POST |
/analysis | analysis | 分析処理 | POST |
/delete/ |
delete | 削除処理 | POST |
/view/ |
vies | 参照処理 | GET/POST |
app.routeの第2引数でメソッドを指定することができます。また、URLにパラメータを加えたい場合は37行目のように<pk>のように記述します。
補足
sqlite3とjinja2に関する内容が出てきます。学習をすすめる上で必要に応じて以下リンクを参照してください。(必ずしも前もって学習する必要はありません。)
次回、mockを作成してまず動くものを作成しましょう。