トップページに戻る
FlaskとDashの比較
Flaskの特徴
- 非常にシンプルで、軽量なWebフレームワークです。また、柔軟正も高く、どのような機能を追加するかを自由に決定できます。
- 開発の自由度: Flaskは開発者が自由にコードを書けるため、カスタマイズが容易です。
- フロントエンド: 主にHTML (template)/CSS/Javascriptで書きます。
逆に言えば、HTML/CSS/JSの全ての機能を使えますが、JSの知識も必要になります
- サーバサイド: python
- 強力なtemplate機能を使えます。
- URL (エントリーポイント)
と関数はpythonのdecoratorによって結び付けられます。
このことを エンドポイント と呼び、関数のことを view関数と呼びます。
- Javascriptを使うことが前提。real
timeアプリケーションや3D CG (webGL, three.jsなど)
も通常のHTML/CSS/JSコーディングスタイルで実現できます。
- 本Webでの典型的なコーディングスタイル:
・ base_url変数により、https://server/base_url
でアクセスする場合に対応する。
・ templateにはbase_urlをわたし、エンドポイントに {{
base_url }} を含める
app.py:
from flask import Flask, render_template
from werkzeug.middleware.dispatcher import DispatcherMiddleware
base_url = "/app/"
app = Flask(__name__)
app.config['APPLICATION_ROOT'] = base_url
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
base_url: app
})
@app.route('/')
def index():
return render_template(index_html, base_url = base_url)
)
index.html:
<script>
fetch('{{ base_url }}run_simulation', {
method: 'POST',
body: new URLSearchParams(new FormData(this))
}).then(response => {
...
</script>
app.wsgi:
import sys
sys.path.insert(0, '/home/conf/public_html/D2MatE/web/wsgi/app_dir')
from app import app as application
httpd.conf:
WSGIScriptAlias /app /home/conf/public_html/D2MatE/web/wsgi/app_dir/app.wsgi
WSGIDaemonProcess app python-home=/home/conf/app/dash
python-path=/home/conf/public_html/D2MatE/web/wsgi/app_dir
WSGIProcessGroup app
<Directory /home/conf/public_html/web/wsgi/app_dir>
Require all granted
</Directory>
Dashの特徴
- データビジュアリゼーションとインタラクティブなWebアプリケーションに特化
- フロントエンド、サーバサイド: 基本的にpythonのみで、HTMLやCSSの知識がなくてもWebアプリケーションを構築できます
- app.layout()によるWebページを構築し、pythonのdecoratorにより、起動変数
(Input) と 状態変数 (State) を引数とする calback関数
の戻り値 (Output) でapp.layout()の変数を更新します。
Outputを更新しないようにするにはdash.no_updateを返すようにするとのことです。
- callback関数は単純で動作がわかりやすいですが、逆に自由度が無い。
例えば、real
timeでグラフやページを更新するアプリを作るのは難しい。
特に、callback関数
への再入を禁止することができないので、
Timer関数などで整合して更新するコーディングは困難です。
- plotly以外の3D CGを使う場合は、webGLやthree.jsなどのJSライブラリを使う必要があります。
- 本Webでの典型的なコーディングスタイル:
・ base_url変数により、https://server/base_url
でアクセスする場合に対応する。
・ httpd+mod_wsgiにデプロイする場合、server = app.serverでFlask()
オブジェクトを受け取り、
.wsgiスクリプトに渡す
・ Dashが内部的に使うライブラリ (React)
をlocalから読みだすため、serve_locallyを使っている
app.py:
import dash
from dash import dcc, html
from dash.dependencies import Input, Output, State
base_url = "/app/"
app = dash.Dash(__name__,
requests_pathname_prefix = base_url,
serve_locally=True,
)
server = app.server
app.wsgi:
import sys
sys.path.insert(0, '/home/conf/public_html/D2MatE/web/wsgi/app_dir')
from app import server as application
httpd.conf:
WSGIScriptAlias /app/home/conf/public_html/D2MatE/web/wsgi/app_dir/app.wsgi
WSGIDaemonProcess app python-home=/home/conf/app/dash
python-path=/home/conf/public_html/D2MatE/web/wsgi/app_dir
WSGIProcessGroup app
<Directory /home/conf/public_html/web/wsgi/app_dir>
Require all granted
</Directory>
View関数とCallbackの違い
FlaskのView関数: Flaskでは、Webアプリケーションの各ページや機能は「view関数」として定義されます。
これは、特定のURLに対して実行される関数です。
DashのCallback: Dashでは、インタラクティブな要素とデータのやり取りを管理するために「callback」を使用します。
callbackは、特定の入力(例えば、ボタンのクリック)に対して実行される関数です。
得意とするアプリケーション
Flask: シンプルなWebアプリケーションやAPIの構築に適しています。
Javascriptを使うことが基本なので、real
timeアプリなども構築できますが、HTML/CSS/JSの知識が必要になります
Dash:
データ分析やデータビジュアリゼーションに特化したアプリケーションに適しています。
例えば、インタラクティブなグラフやダッシュボード、データ探索ツールなどが挙げられます。
ただし、real timeアプリの構築は困難です。