Help us understand the problem. What is going on with this article?

Flask導入〜Blueprint適用メモ

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

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

参考

https://www.subarunari.com/entry/2017/10/11/003225

shimajiri
株式会社エルバークスクリプト代表。 某情報通信企業でのIT営業を経てプログラマーを志し、現在はプログラマーと代表を兼任。 自身の勉強&趣味でQiitaに記事を書いている。Python,Java,JavaScript,Perl,Ruby on Rails,PHPなど。最近は趣味でゲームを製作中。
https://ryota-shimajiri.github.io/portfolio/
lberc
ITで暮らしを豊かにするものを創造していく企業、エルバークグループです。ウェアラブルデバイスを制御するモバイルアプリやWebAPIの開発、サーバー構築、モバイルアプリの第三者検証業務を請け負っています。
https://www.lberc-g.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away