タイトルのことをなるべく簡単に行ってみます。
Blueprintを使用すると、アプリケーションの機能を分割して実装することができます。
肥大化したプロジェクトを整理するための手段として、公式でもBlueprintが推奨されています。
Flaskのインストール
$ sudo pip3 install flask
ディレクトリ構成
$ cd ~/workspace/sample-flask/
$ ls
server.py
server.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def func_1():
return 'Hello world'
@app.route('/test')
def func_2():
return 'Test'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
実行コマンド
$ python3 server.py
* Serving Flask app "server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 337-601-528
127.0.0.1 - - [02/Mar/2020 11:18:06] "GET / HTTP/1.1" 200 -
WARNINGはとりあえず無視して、
ブラウザから127.0.0.1にアクセスするとHello worldと表示されます。
続けて、ブラウザに127.0.0.1/testにアクセスすると今度はTestと表示されます。
Blueprintで分割する
"/test"を別ファイルに分割してみます。
funcというディレクトリを作成し、その下にtest.pyを作成しました。
ディレクトリ構成
$ cd ~/workspace/sample-flask/func
$ ls
__init__.py
test.py
Blueprintをimportして、
切り出したtest.pyでBlueprintオブジェクトを生成します。
test.py
from flask import Blueprint
# Blueprintのオブジェクトを生成する
app = Blueprint('func', __name__)
@app.route('/test')
def func_2():
return 'Test'
server.py側で、分割したBlueprintを登録します。
server.py
from flask import Flask
from func import test
app = Flask(__name__)
# 分割したblueprintを登録する
app.register_blueprint(test.app)
@app.route('/')
def func_1():
return 'Hello world'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
実行してルーティングが上手くいっているか確認してみます。
先ほどと同じようにブラウザから127.0.0.1にアクセスするとHello worldと表示され、
続けて、ブラウザに127.0.0.1/testにアクセスすると今度はTestと表示されます。
上記が無事上手く行けば、Blueprintを使用して分割が出来ています。
参考