【Flask】blue_printで機能分割!

こんにちはdanayeonです

ひまつぶしスイッチ、鋭意作成中です!

今回は、flaskで機能の分割を助けてくれるblue_printについて解説していきます!

きのうのぶんかつ??

まず質問です

Flaskの良さってなんでしょうか

いろいろあるかとは思いますが、私が一番推したいのはやっぱり、コンパクトに開発できる点ですね!

私の場合、Flask => Railsの順に学習したので、Railsでルーティングとコントローラを別ファイルに記述する面倒臭さに驚きました

Flaskでは、以下のような記述でルーティングと処理を同時に記述することができます


    @app.route('/')
    def action():
      # 処理
  

これが好きでFlaskに帰ってきたわけなんですが、この記述方法にもたった一つ、欠点があります

めちゃめちゃ記述量が多い

そうなんです

ひまつぶしスイッチはそんなに規模の大きいWebアプリケーションではないのですが、それでも1つのファイルに全ての処理を記述するとなるとさすがに見にくいし重い

100行、200行あるファイルなんて分割したくなっちゃいますよね

そこで活躍してくれるのがblue_printです

やってみよう!

文章でああだこうだ言っても仕方ないので実際のコードを見てみましょう!

まずは基本の実行ファイル


    # app.py
    from flask import Flask

    app = Flask(__name__)

    @app.route('/')
    def action1():
        return 'Hello world'

    @app.route('/next')
    def action2():
        return 'This is the next page'

    if __name__ == '__main__':
        app.run(debug=True)
  

さて、このファイルを分割していきましょう!

分割用のファイルを作成して、


  # ターミナル
  $ touch action2.py

action2の処理を移します


  # action2.py
  from flask import Blueprint
  action2_blueprint = Blueprint("action2", __name__)

  @action2.route('/next')
  def action2():
    return 'This is the next page'

はい!出ましたblue_print!

上記コードの2~3行目にあるのがblue_printの設定です

簡単ですね

続いて、分割したファイルを実行ファイルに読み込んでいきます


  from flask import Flask
  from action2 import action2_blueprint

  app = Flask(__name__)

  app.register_blueprint(action2_blueprint)

  @app.route('/')
  def action1():
      return 'Hello world'

  if __name__ == '__main__':
      app.run(debug=True)

これだけです!

この例だけでは分割する意味って何?となりますが、コードの記述量が増えてくると使わずにはいられない(というか公式で推奨されてる)便利アイテムですので是非使ってみてください!

さらなる高みへ

このBlue_print、もっとすごいことができます

機能ごとに、ルーティング、テンプレート、スタイルシートなどを一つのディレクトリにまとめてしまえるのです!

この辺については、話すと長くなるのでまたの機会に!