LoginSignup
57

More than 1 year has passed since last update.

はじめてのFlask導入〜Blueprint適用

Last updated at Posted at 2020-03-02

タイトルのことをなるべく簡単に行ってみます。

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を使用して分割が出来ています。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57