アプリケーションのセットアップ
Flaskアプリケーションは、Flask
クラスのインスタンスです。 構成やURLなど、アプリケーションに関するすべてがこのクラスに登録されます。
Flaskアプリケーションを作成する最も簡単な方法は、「Hello、World!」のように、コードの先頭にグローバルFlask
インスタンスを直接作成することです。 前のページで行った例。 これは単純で便利な場合もありますが、プロジェクトが大きくなるにつれて、いくつかのトリッキーな問題が発生する可能性があります。
Flask
インスタンスをグローバルに作成する代わりに、関数内に作成します。 この機能は、アプリケーションファクトリとして知られています。 アプリケーションに必要な構成、登録、およびその他のセットアップはすべて関数内で行われ、その後アプリケーションが返されます。
アプリケーションファクトリ
コーディングを開始する時が来ました! flaskr
ディレクトリを作成し、__init__.py
ファイルを追加します。 __init__.py
は二重の役割を果たします。アプリケーションファクトリが含まれ、flaskr
ディレクトリをパッケージとして扱う必要があることをPythonに通知します。
mkdir flaskr
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
create_app
はアプリケーションファクトリ関数です。 チュートリアルの後半で追加しますが、すでに多くのことを行っています。
app = Flask(__name__, instance_relative_config=True)
は、Flask
インスタンスを作成します。__name__
は、現在のPythonモジュールの名前です。 アプリは、いくつかのパスを設定するためにそれがどこにあるかを知る必要があり、__name__
はそれを伝えるための便利な方法です。instance_relative_config=True
は、構成ファイルがインスタンスフォルダーに関連していることをアプリに通知します。 インスタンスフォルダはflaskr
パッケージの外部にあり、構成シークレットやデータベースファイルなど、バージョン管理にコミットしてはならないローカルデータを保持できます。
app.config.from_mapping()
は、アプリが使用するデフォルトの構成を設定します。- SECRET_KEY は、データを安全に保つためにFlaskおよび拡張機能によって使用されます。 開発中に便利な値を提供するために
'dev'
に設定されていますが、展開時にはランダムな値でオーバーライドする必要があります。 DATABASE
は、SQLiteデータベースファイルが保存されるパスです。app.instance_path
の下にあります。これは、Flaskがインスタンスフォルダー用に選択したパスです。 データベースについて詳しくは、次のセクションで説明します。
- SECRET_KEY は、データを安全に保つためにFlaskおよび拡張機能によって使用されます。 開発中に便利な値を提供するために
app.config.from_pyfile()
は、インスタンスフォルダー内のconfig.py
ファイル(存在する場合)から取得した値でデフォルト構成をオーバーライドします。 たとえば、展開時に、これを使用して実際のSECRET_KEY
を設定できます。test_config
もファクトリに渡すことができ、インスタンス構成の代わりに使用されます。 これは、チュートリアルの後半で作成するテストを、構成した開発値とは関係なく構成できるようにするためです。
os.makedirs()
は、app.instance_path
が存在することを保証します。 Flaskはインスタンスフォルダを自動的に作成しませんが、プロジェクトがそこにSQLiteデータベースファイルを作成するため、作成する必要があります。@app.route()
は単純なルートを作成するため、チュートリアルの残りの部分に入る前に、アプリケーションが機能していることを確認できます。 URL/hello
と、応答を返す関数(この場合は文字列'Hello, World!'
)との間に接続を作成します。
アプリケーションを実行する
これで、flask
コマンドを使用してアプリケーションを実行できます。 ターミナルから、Flaskにアプリケーションの場所を伝え、開発モードで実行します。 flaskr
パッケージではなく、トップレベルのflask-tutorial
ディレクトリにいる必要があることを忘れないでください。
開発モードでは、ページで例外が発生するたびに対話型デバッガーが表示され、コードに変更を加えるたびにサーバーが再起動されます。 チュートリアルに従って、実行したままブラウザページをリロードすることができます。
LinuxおよびMacの場合:
export FLASK_APP=flaskr
export FLASK_ENV=development
flask run
Windowsコマンドの場合、export
の代わりにset
を使用します。
set FLASK_APP=flaskr
set FLASK_ENV=development
flask run
Windows PowerShellの場合、export
の代わりに$env:
を使用します。
$env:FLASK_APP = "flaskr"
$env:FLASK_ENV = "development"
flask run
次のような出力が表示されます。
* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761
ブラウザで http://127.0.0.1:5000/hello にアクセスすると、「Hello、World!」が表示されます。 メッセージ。 おめでとうございます。FlaskWebアプリケーションを実行しています。
データベースの定義とアクセスに進みます。