トップページに戻る

flaskコマンド

 Flaskでは、環境変数FLASK_APPに起動スクリプトを登録すると、下記のようなflaskコマンドを使えます。


基本的なファイル構成 

my_flask_app/
├── app/
│ ├── __init__.py    <= これを置くことにより、app.パッケージとして呼び出せる
│ ├── routes.py
│ ├── models.py
│ └── ...
├── venv/
├── .env (.env.*)
├── config.py
└── run.py     <= 起動ファイルを分ける場合

run.py:

from app import create_app

app = create_app()

if __name__ == '__main__':
app.run()

app.__init__.py:

from flask import Flask

def create_app():
app = Flask(__name__)

# コンフィグの読み込み
app.config.from_object('config.Config')

# ブループリントの登録
from .routes import main as main_blueprint
app.register_blueprint(main_blueprint)

return app

config.py:

import os

class Config:
    SECRET_KEY = os.getenv('SECRET_KEY') or 'default_secret_key'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class DevelopmentConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.getenv('DEV_DATABASE_URI') or 'sqlite:///dev.db'
    DEBUG = True

class TestingConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.getenv('TEST_DATABASE_URI') or 'sqlite:///test.db'
    TESTING = True

class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URI') or 'sqlite:///prod.db'
    DEBUG = False
    TESTING = False

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
    }


.env ファイルを用意すると、この設定を自動的にしてくれます。

.env:

FLASK_APP=app.py
FLASK_ENV=development
SECRET_KEY=your_secret_key
SQLALCHEMY_DATABASE_URI=sqlite:///site.db
MAIL_SERVER=smtp.example.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-email-password

.env.developtment:

FLASK_ENV=development
SECRET_KEY=dev_secret_key
DEV_DATABASE_URI=sqlite:///dev.d

.env.testing:

FLASK_ENV=testing
SECRET_KEY=test_secret_key
TEST_DATABASE_URI=sqlite:///test.db

.env.production:

FLASK_ENV=production
SECRET_KEY=prod_secret_key
DATABASE_URI=sqlite:///prod.db


.env*の読み込み

app.py:

import os
from flask import Flask
from dotenv import load_dotenv
from config import config

# .envファイルの読み込み
load_dotenv()

app = Flask(__name__)
env = os.getenv('FLASK_ENV') or 'default'
app.config.from_object(config[env])

# 続く


flaskコマンドで環境を切り替える

export FLASK_ENV=development
flask run


上記のファイル構成の場合のhttpd+mod_wsgiへのデプロイ

app.wsgi:

import os
from app import create_app

os.environ['FLASK_APP'] = 'run.py'
os.environ['FLASK_ENV'] = 'production'
app = create_app()

httpd.conf:

<VirtualHost *:80>
ServerName yourdomain.com

WSGIDaemonProcess my_flask_app threads=5
WSGIScriptAlias / /path/to/your/project/wsgi.py

<Directory /path/to/your/project>
Require all granted
</Directory>

Alias /static /path/to/your/project/app/static
<Directory /path/to/your/project/app/static>
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


flaskコマンド

環境変数:
FLASK_APP: アプリケーションのエントリーポイントを指定
FLASK_ENV:  実行環境を指定
FLASK_DEBUG: デバッグモード(例:FLASK_DEBUG=1)。

flask run
--host: ホスト(デフォルトは127.0.0.1)。
--port: ポート番号 (デフォルトは5000)。
--debug: デバッグモード

開発サーバーを実行し、Flaskアプリケーションにブラウザでアクセス可能になる

flask shell 

Flaskアプリケーションコンテキスト内でPythonシェルを起動

flask routes 

アプリケーションのすべてのルートを一覧表示

flask db 
flask db init: マイグレーションディレクトリを初期化
flask db migrate: 新しいマイグレーションを作成し
flask db upgrade: データベースを最新のマイグレーションにアップグレード

データベースのマイグレーション操作。Flask-Migrate拡張機能と連携して使う

flask test 

Flaskアプリケーションのテストを実行

Flaskコマンドのカスタマイズ

app.pyで@app.cli.commandを使うと使えるようになります。

以下の例では flask hello コマンドが使えるようになります。

app.py:

import click
from flask import Flask

app = Flask(__name__)

@app.cli.command("hello")
def hello():
    click.echo("Hello, Flask!")