この記事ではFlaskウェブアプリの環境構築の手順とアプリ構成を説明します。
Application FactoryはFlaskアプリの一般的な構成方法を指します。
主に以下の記事を参考にしました。
https://hackersandslackers.com/demystifying-flask-application-factory/
パッケージのインストール
まず、Pythonの仮想環境virtualenvを立ち上げます。
仮想環境は複数プロジェクト間のパッケージ依存を避けるためには欠かせないものです。
以下のコマンドでvenvという仮想環境のディレクトリを作り、たちあげます。
次に、pipを使ってパッケージをインストールしていきます。
取り合えずflaskとflask_corsをインストール。
インストールしたパッケージの詳細はrequirements.txtに記しておくと便利です。
$ py-3 -m venv venv
$ venv\Scripts\activate # このコマンドはOSによって異なります。上記はWindowsコマンド
(venv) $ pip install flask
(venv) $ pip install flask_cors
(venv) $ pip freeze > requirements.txt
アプリ作成・設定
次に、Applicationディレクトリを作ってその中に、init.pyを作ります。
このファイルにはアプリを作成する関数を書きます。
アプリの設定や初期ページ、CORSの設定などを行っています。
from flask import flask, flask_cors
def create_app():
# アプリのインスタンス
app = Flask(__name__, template_folder="templates", static_folder="static")
app.config.from_object('config.configObject')
CORS(app, resources={r'/*': {'origins': '*'}})
# 初期ページの設定
@app.route('/')
def hello_world():
return "Hello World"
return app
次に、アプリ設定をみていきましょう。
ファイルをプロジェクトディレクトリ直下にconfig.pyを作ります。
Configファイルに、オブジェクトを作り、アプリ設定要項を加えます。
例えばデータベースURLやシークレットキーなどなど...
各要項は環境変数ファイルから取り出すようにしました。
ひとまずウェブアプリに必要不可欠なDBのURIとセッションのシークレットキーを追加します。
こういう書き方をすると環境変数によって開発configとプロダクションconfigを使い分けることができて便利です。
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY')
class ProdConfig(Config):
DATABASE_URI = os.environ.get('PROD_DATABASE_URI')
class DevConfig(Config):
DATABASE_URI = os.environ.get('DEV_DATABASE_URI')
if os.environ.get('FLASK_ENV') == 'production':
configObject = ProdConfig
else:
configObject = DevObject
上記のconfigObjectは__init__.pyで使われています。
サーバー立ち上げ
それでは、実際にサーバーを走らせるファイルをみていきましょう。
アプリ作成の関数を呼び、走らせる。これだけです。
from application import create_app
app = create_app()
if __name__ == "__main__":
app.run()
最後にプロジェクトディレクトリ内に環境変数ファイルを作って
FLASK_APP = "wsgi"
FLASK_ENV = "development"
SECRET_KEY = ""
DEV_DATABASE_URI = ""
PROD_DATABASE_URI = ""
ターミナルで以下のコマンドを打ったら...
$ flask run
* Serving Flask app "wsgi" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 265-303-162
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
サーバーが立ち上がりました♪
早速localhost開いてみます。私の場合はlocalhost:5000/です。
ターミナルが案内するポートに移動しましょう。
Hello world!と出たらOKです!
プロジェクト構成
この段階でのプロジェクト構成はこんな感じです。
flask_jinja_app/
|- venv
|- application
__init__.py
config.py
wsgi.py
requirements.txt
.flaskenv
最後に
アプリのサーバーサイドが整ってきました。
あとはDBの設定、Blueprintの登録と共通テンプレートページの作成をしたら基本的なウェブアプリの骨組みが完成します。
残りはまた別の記事で。文章力がなくて申し訳ありませんでした。-_-