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
# 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'→引数。フォルダーとパスを指定する。
#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が完成する。