1. 前に書く
Flask ブループリントに関するチュートリアルはすでにたくさんあり、CSDN のブログにはブループリントの使用を記録するブログがすでに数十件あります。しかし、筆者は途中で先人のブログを見て学び、つまずいたり、落とし穴を踏んだりしましたが、ここでは、わかりやすく効率的なブループリントを目指して、学んだこととプロジェクトでの実践経験をまとめたいと思います。学習計画 、後続の学習者に読んでもらいます。
2. ブループリントの概念
[コア] 要件の観点からブループリントとは何かを説明する
Python Flask フレームワークは非常に使いやすく、Web ページのバックエンドは数文で構築できますが、企業数が増えると Web ページのルートの数もapp.py
増加保守効率が低下します。
ルートを分類および管理し、ユニットの位置を便利かつ効率的にクエリするために、蓝图
Flask フレームワークの組み込み機能がこの問題をうまく解決できます。
ブループリントの役割は、次の 2 つの異なる方法app.py
を通じて。
図 1: 左の図はブループリント管理を使用せず、右の図はブループリント管理を使用 図 1: 左の図はブループリント管理を使用せず、右の図はブループリント管理を使用図 1: 左の図はブループリント管理を使用せず、右の図はブループリント管理を使用しています
この比較表を見ると、ブループリントの役割を理解する必要があります。
【詳細】設計図の使い方
- ルート管理でブループリント オブジェクトを作成する
- パッケージ管理を通じてブループリント オブジェクトをインポートし、上位層の抽出を容易にする
- ブループリント オブジェクトをインポートし
app.py
て登録を完了します
3 つの簡単な手順がありますが、実装プロセスにはまだ多くの詳細があります。1 つずつ説明しましょう。
3. 実戦から設計図を応用する方法を解説
以下の説明で使用するコードとエンジニアリング構造は、著者が現在開発している Flask デプロイメント深層学習モデルの可視化プロジェクトから引用したものであり、実際の戦闘から直接ブループリントの適用を理解することにつながることを願っています。初心者が読んで理解するのに役立ちます。
0. ファイル構造
図 2: プロジェクトの基本ファイル構造 図 2: プロジェクトの基本ファイル構造図 2: 基本的なプロジェクト ファイル構造
図に示すように、基本的な Flask プロジェクト ファイル構造には 3 つのフォルダーと 1 つの Python ファイルがあります。
router
私たちが使用するブループリントであるルーティング管理を担当します。static
css、js ファイルなどの静的ファイルを保存するために使用されます。templates
HTML ファイルの保存に使用されますapp.py
最外層の唯一の Python ファイルは、実行用の Flask コア構成スクリプトでもあります
router フォルダーを展開すると、次のような構造になります。
図 3: ルーター フォルダーの構造 図 3: ルーター フォルダーの構造図3 :ルーターフォルダーの構造
私たちのルーター設計の中心的なコンセプトは、ルーターを Python パッケージとして使用することです。
したがって、ルーターフォルダーであっても、その下の各ユニットであっても、__init__.py
ファイルが存在することになり、これ__init__.py
も後で役立ちます。
1. ビュー関数を作成し、ブループリント オブジェクトを作成します。
ここでは、ルートを例として取り上げますindex
。ルートは主に、ホームページに関連するいくつかの基本的なページ対話機能の処理を担当します。
まず、ルートを管理するために、ビュー関数index_view.py
とも呼ばれるファイルを作成します。
命名規則に注意してください。通常、ビュー関数はname_view.pyに基づいて名前が付けられます。
view関数の内容は以下の通りです。
図 4: view 関数の内容 図 4: view 関数の内容図 4: view 関数の内容
上記のコードから、次の情報を取得できます。
- まず、ブループリント オブジェクトを作成します。
index_bp = Blueprint('index', __name__)
この文はブループリント オブジェクトを作成しています。最初のパラメーターはブループリントの名前で、2 番目のパラメーターは、この .py ファイルをビュー関数として使用することを意味します。 - ルートを作成します。ルートを作成するには、元の から
app.route()
、index_bp.route()
つまり作成したばかりのブループリント オブジェクトまでの統一形式があり、元の を置き換えて、app
独自に定義したルートを括弧内に入力します。
2 [非常に重要] ブループリント オブジェクトを忘れずにエクスポートしてください
このエクスポートされたブループリント オブジェクトは、レイヤーごとのエクスポート関係です。
中心的な目標は、ここで最外層app.py
を使用できるようにすることですindex_bp
。
したがって、index
path の下には__init__.py
次のものがあります。
from .index_view import index_bp
index_bp
オブジェクトを紹介する目的を達成するには 1 つの文で十分です。
router
パスの下には__init__.py
次のものがあります。
from .index import index_bp
このコードは、このディレクトリindex
内のパッケージからオブジェクトをインポートすることを意味しますindex_bp
。
もちろん、他に 2 つのルートがあることを考慮すると、最終結果はrouter.__init__.py
次のようになります。
from .index import index_bp
from .paper import paper_bp
from .process import process_bp
3.app.py
ブループリントの登録を完了します。
app.py
のコードは次のとおりです。
from flask import Flask
from datetime import timedelta
from router import index_bp, paper_bp, process_bp
app = Flask(__name__)
app.secret_key = 'secret!'
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(seconds=1)
app.register_blueprint(index_bp)
app.register_blueprint(paper_bp, url_prefix='/paper')
app.register_blueprint(process_bp, url_prefix='/process')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5003, debug=True)
その中で、まず次のことがわかります。
- 以前に行ったレイヤーごとの導入作業 (Python パッケージ管理に関連する操作) のおかげで、ルーター パッケージから 3 つのブループリント オブジェクトをインポートしました。
app.register_blueprint()
ブループリントオブジェクトを登録する関数
このうち、app.register_blueprint()
関数の第 2 パラメータはurl_prefix
アドレス接頭辞の意味です。
例えば紙にはルーティング名がある/download_paper
ので、外部からアクセスする場合は必ず経由して/paper/download_paper
アクセスする、つまり固定のルーティングプレフィックスが付加されます。
注: 登録を完了しないと、ブループリントをアクティブにすることはできません。
4番目、裏面に書きます
上記は比較的明確なブループリントの紹介であり、読者や初心者にとって大きな助けとなることを願っています。新しいアイデアがありましたら、お気軽にご連絡ください。