正確には、Flask Blueprintsとは何ですか?


180

私が持って読ん公式フラスコのドキュメント青写真も上の1または2それらの使用に関するブログ記事を。

私はそれらを自分のWebアプリでも使用しましたが、それらが何であるか、またはそれらがどのようにアプリ全体にどのように適合するかを完全には理解していません。アプリのインスタンスとどのように似ていますが、完全ではありませんか?ドキュメンテーションは包括的ですが、私はそれを刺激するために素人の説明または啓蒙的な類推を求めています。同僚が私にここで尋ねることを選んだフラスコの青写真を説明するように頼んだとき、私は十分に当惑しました。

回答:


287

ブループリントは、Webアプリケーションの「セクション」を生成するためのテンプレートです。あなたはそれを型と考えることができます:

金の円形浮彫りを取り除いたばかりの円形浮彫り

ブループリントを取得して、いくつかの場所でアプリケーションに適用できます。それを適用するたびに、設計図はアプリケーションの石膏にその構造の新しいバージョンを作成します。

# An example
from flask import Blueprint

tree_mold = Blueprint("mold", __name__)

@tree_mold.route("/leaves")
def leaves():
    return "This tree has leaves"

@tree_mold.route("/roots")
def roots():
    return "And roots as well"

@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
    return "Looking at the rings for {year}".format(year=year)

これは、木を扱うための単純な型です。木を扱うすべてのアプリケーションは、その葉、根、およびその年輪へのアクセスを提供する必要があると述べています。それ自体は中空のシェルです。アプリケーションに感心するまで、ルーティングや応答はできません。

from tree_workshop import tree_mold

app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")

いったん作成されると、register_blueprint関数を使用してアプリケーションに「印象づける」ことができます。これにより、アプリケーションで設計図の型がで指定された場所に「印象づけ」られurl_prefixます。


5
以下は、ブループリントを使用したアプリケーション構造に関する素晴らしい記事です。exploreflask.com/en/latest/blueprints.html
Devasish 2017

5
私はまだ混乱しています。それは同じコードを指すことを意味しoak/leavesfir\leaves指しますか?また、文字列の目的は何であるmoldBlueprint("mold", __name__)
Codevalleyは

8
はい、両方oak/leavesfir/leavesによって処理されますdef leaves"mold"ブループリントの名前であり、ルートを参照するときの曖昧さをなくすために使用されます(someBlueprint.routeNamevsなどanotherBlueprint.routeName)。
Sean Vieira 2017

2
url_prefix関数でにアクセスするにはどうすればよいですか?それがオークかモミかを確認するには、tree_mold.url_prefix私に与えるNone
Mellkor

3
@Mellkor-単に使用しますurl_for('.relative_route_name')(先頭のドットに注意してください)。たとえばurl_for('.roots')、マウントされた各ポイントで正しくスコープされたURLを自動的に提供します。
Sean Vieira

6

@Devasishのコメントで指摘されているように、この記事は良い答えを提供します:

http://exploreflask.com/en/latest/blueprints.html

記事からの引用:

この例はFacebookです。FacebookがFlaskを使用している場合、静的ページ(つまり、ログアウトしたホーム、登録、概要など)、ダッシュボード(つまり、ニュースフィード)、プロファイル(/ robert / aboutおよび/ robert / photos)の青写真がある場合があります。設定(/ settings / securityおよび/ settings / privacy)など。これらのコンポーネントはすべて、一般的なレイアウトとスタイルを共有していますが、それぞれに独自のレイアウトがあります

これは非常に良い解釈であり、特に「FacebookがFlaskを使用している場合」の部分です。ブループリントが実際にどのように機能するかを視覚化するための具体的な状況を示しています。


3

私も自分でつまずいただけで、ドキュメントのソースをいくつか読んだ後、混乱しました。最初は、C#/ Java実装スタイルのように定義しましたが、後で定義することについて心配する必要はありません。しかし、私はこのページを偶然見つけて、非常に一般的な(そして非常に陽気な今日のイベント)という言葉にしています。https://hackersandslackers.com/flask-blueprints/

リンクで言及されており、実際の使用法が明確にわかる利点の1つは、アプリを効率的に論理的に整理/分割できることです。したがって、設計されたカプセル化がいくつか提供されます。

編集:私は現在、それを使用して私のwebappsコードをセグメント化しています。リードデザイナーがVue.jsでフロントエンドを作成したいと思ったので、これも良い決定でした。私はまだ使用していませんが、そのプロジェクトファイルを見ると、はるかに面倒に見え、おそらく多くの名前の衝突が発生しやすくなります。


0

より大きなプロジェクトの場合、すべてのコードを同じファイルに含めることはできません。代わりに、主に機能に基づいて、大きなコードを個別のファイルにセグメント化または分割できます。壁を形成するレンガのように。

これがお役に立てば幸いです。これは理論的な質問なので、コードは投稿しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.