Python
Flask
Web
Application

Flaskで大きいアプリケーションを作るときのTips

More than 1 year has passed since last update.

通常、Flaskでは

flask.py
from flask import Flask

app = Flask(__file__)

こうやってアプリケーションを定義するが、 MVT で作りたいという場合は、

blueprint.py
from flask import Blueprint

app = Blueprint("app", __name__, url_prefix="/path")

このようにアプリケーションを定義する。

たとえば、

.
├── app.py
├── model.py
├── static
│   ├── interface.js
│   └── layout.css
├── template
│   ├── design.html
│   └── main.html
└── view
    ├── __init__.py
    ├── api.py
    ├── auth.py
    ├── main.py
    └── setting.py

このようなファイル構造の場合。

view/以下の各Pythonスクリプトには Blueprintでアプリケーションを定義する。

api.py
from flask import Blueprint

app = Blueprint("api", __name__, url_prefix="/api")

app.py には view/以下の各PythonスクリプトのBlueprintを登録する必要がる。

app.py
from flask import Flask
from view import api, auth, main, setting

application = Flask(__name__)

modules_define = [api.app, auth.app, main.app, setting.app]
for app in modules_define:
        application.register_blueprint(app)

まず view/ ディレクトリ以下の各Pythonスクリプトをimportする。

from view import api, auth, main, setting

次に Blueprintアプリケーションを登録する

application.register_blueprint(app)

これでMVTができる。

ちなみに

ちなみに、app.py に直接 view/ 以下のBlueprintアプリケーションを登録するのではなく、 view/ 以下の __init__.py にBlueprintアプリケーションを登録して、それを app.py でimportする、という方法もある。

__init__.py
from flask import Flask
import api, auth, main, setting

application = Flask(__name__)

modules_define = [api.app, auth.app, main.app, setting.app]
for app in modules_define:
        application.register_blueprint(app)
app.py
from view import application

こちらのほうが楽かも。