Pythonステップアップ(49)-初認識Flask Blueprint


Pythonステップアップ(49)-初認識Flask Blueprint
前言
 Python Web開発時にFlaskフレームワークを選択します.プロジェクトモジュール区分フェーズでは,Blueprint(ここではひとまず「ブルーブック」と呼ぶ)を用いる.Blueprintは、異なる機能を実現するmoduleを分離することによって、大きなアプリケーションをそれぞれ異なる機能を実現するmoduleに分割する.あるBlueprintで別のblueprintのview functionを呼び出すことができますが、対応するblueprint名を付けます.Blueprintには他にもメリットがあります.本質的には、プログラムをより緩やかに結合させ、より柔軟にし、多重性を増加させ、エラー検出効率を高め、エラー確率を低下させることです.具体的なプロジェクト開発の過程で、異なるブルーブックはそれぞれ異なる機能モジュールに対応している.たとえばauthライセンスモジュールとプロジェクトマスターモジュールです.
実例説明
以下、実際のプロジェクト開発を例にとると、プロジェクト構造図は以下の図に示す通りである:異なるブルーブックはそれぞれ異なるPythonパッケージにあり、青写真の作成はPythonパッケージの下にあるinitである.pyファイル.違うPythonが包んだviewspyファイルは、異なるブルーブックの下でのルーティングに対応します. サンプルプロジェクトでは、authライセンスパッケージの下にあるブルーブック作成コードは次のとおりです.
from flask import Blueprint

auth = Blueprint('auth', __name__)

from . import forms, views

  上のブルーブック作成文は、「auth」という名前のブルーブックを作成します.fromをimport forms、viewsパケット文をinitに配置します.pyの末尾はviewsであるため、ループインポート依存を避けるためである.pyにはブルーブックauthもインポートされます.  Views.pyファイルの内容は次のとおりです.
from flask import request, flash, render_template, redirect, url_for
from . import auth
from web_flask.app.dal_pymysql import DataManager

#      
@auth.route('/login', methods=['POST'])
def login():
    form = request.form
    #   request  form          ,       
    uname = request.form['username']
    pwd = request.form['password']

ここでfromを使用します.import auth方式で必要なブルーブックをインポートします.ブルーブックの登録文は、プロジェクト作成のファクトリメソッドに配置され、登録コードは次のとおりです.
from .auth import auth as auth_blueprint
from .main import main as main_blueprint
#      url_prefix='/admin'
app.register_blueprint(auth_blueprint,)
app.register_blueprint(main_blueprint, static_folder='static')
return app

  ブルーブックでの登録関数register_blueprint()では、最初のパラメータは登録されたブルーブック名です.アプリケーションオブジェクトに青写真を登録する場合はurl_を指定する必要があります.prefixキーワードパラメータ(このパラメータのデフォルトは/).その他の追加可能なパラメータはFlaskの公式ドキュメントを参照してください.
注意事項
注意:ブルーブックにビュー関数viewsを記述します.pyには主に2つの違いがあります.
  • 第1に、前のルーティングプログラムと同様に、ルーティング修飾器はブルーブックによって提供される.
  • 第2、url_for()関数の使い方が違います.

  • 覚えてるかもしれないurlfor()関数の最初のパラメータはルーティングのエンドポイント名であり、プログラムのルーティングではデフォルトでビュー関数の名前である.たとえば、単一スクリプトプログラムでは、index()ビュー関数のURLにurl_を使用できます.for(‘index’)取得.  ブルーブックでは異なり、Flaskはブルーブックのすべてのエンドポイントにネーミングスペースを追加します.これにより、競合することなく、異なるブルーブックで同じエンドポイント名を使用してビュー関数を定義できます.ネーミングスペースはブルーブックの名前(Blueprintコンストラクション関数の最初のパラメータ)であるため、ビュー関数index()に登録されているエンドポイント名はmainである.index、url_を使用するURLfor(‘main.index’)取得.  url_for()関数は、url_for(‘.index’).このような書き方では,ネーミングスペースは現在のリクエストが存在するブルーブックである.これは、同じブルーブックのリダイレクトでは簡略化された形式を使用できますが、ブルーブックにまたがるリダイレクトでは、ネーミングスペースのあるエンドポイント名を使用する必要があります.urlを使用しない場合はfor(‘main.index’)またはurl_for('.index')の形式では、プロジェクト実行中に要求されたURLエラーがプロンプトされます.
    電子書籍付福利厚生(ポイントフリーダウンロード)
    『Flask Web開発:Pythonに基づくWebアプリケーション開発実戦』『Learning Python,5 th Edition』