Scaling Applications 最低限で動かす

最低限でblueprintを使いこなす。 上から順に書きなぐる

Flaskは主にこの3つで構成される。
appフォルダー
configフォルダー
run.py


├── app
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-36.pyc
│   ├── auth
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       └── __init__.cpython-36.pyc
│   └── catalog
│       ├── __init__.py
│       ├── __pycache__
│       │   ├── __init__.cpython-36.pyc
│       │   └── routes.cpython-36.pyc
│       ├── models.py
│       ├── routes.py
│       └── templates
├── config
│   ├── dev.py
│   ├── prod.py
│   └── test.py
└── run.py
#run.py
from app import create_app

if __name__ == '__main__':
    flask_app = create_app('dev')
#    with flask_app.app_context():
#        db.create_all()

    flask_app.run()


app/ init.pyの役割
主な役割は2つあります
pythonスクリプトがあるディレクトリを表す役割
②必要なモジュールをimportするなどの初期化処理を記載し,初期化の役割を担う役目があります。

つまり、異なるディレクトリのファイルをインポートする際にその役割を発揮する。いちいちimportしなくてもいい。
Blueprint を登録する。 app.register_blueprint(main)

# app/__init__.py
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app(config_type):  # dev, test, or prod

    app = Flask(__name__)
    configuration = os.path.join(os.getcwd(), 'config', config_type + '.py')
    # C:\\Users\\dell\\PycharmProjects\\book_catalog\\config\\dev.py
    app.config.from_pyfile(configuration)
    db.init_app(app)  # initialize database
    
    
    from app.catalog import main
    app.register_blueprint(main)

    return app

f:id:yukking3:20180505114733p:plain

# app/catalog/__init__.py
from flask import Blueprint
main = Blueprint('main', __name__, template_folder='templates')

from app.catalog import routes

catalog/init.pyでmainを作って、app/init.pyにmainを送る
'main', →名前
name, →引数。フォルダー名を指定する。
template_folder='templates'→引数。フォルダーとパスを指定する。

f:id:yukking3:20180505114919p:plain

#catalog/routes.py

from app.catalog import main

@main.route('/')
def hello():
    return 'hello worlld'

一連の流れを整理する必要がある。 run.pyによってdef create_appが動き出す。
お大河にimportmし合うので順番間違えるとエラーが出る。サーキュレーション問題である。
1. run.pyでflask_app.run()。ここでdev,prodtestを選ぶ
2.init.pyでcreate_app関数でconfig収集、DB接続、app.register_blueprint(main)blueプリント登録
3.routes.pyで@main.route('/')で表示設定

app/init.pyがmainをよび出す。

mainは# app/catalog/init.pyにある。

app/catalog/init.pyが発動する。

route.pyを呼び出す。

@main.route('/')のhello worldが# app/catalog/init.pyに送られる。

app/catalog/init.pyのmainが完成する。

その後で# app/init.pyのmainが完成する。