Was genau sind Flask Blueprints?

180

Ich habe die offizielle Flask-Dokumentation zu Blueprints und sogar ein oder zwei Blog-Beiträge zu deren Verwendung gelesen .

Ich habe sie sogar in meiner Web-App verwendet, aber ich verstehe nicht ganz, was sie sind oder wie sie in meine App insgesamt passen. Wie ist es einer Instanz meiner App ähnlich, aber nicht ganz? Die Dokumentation ist umfassend, aber ich suche eine Erklärung für Laien oder eine aufschlussreiche Analogie, um sie für mich zu entfachen. Ich war hinreichend ratlos, als ein Kollege mich bat, ihnen einen Fläschchenplan zu erklären, den ich hier fragen wollte.

JoshieSimmons
quelle

Antworten:

285

Ein Entwurf ist eine Vorlage zum Generieren eines "Abschnitts" einer Webanwendung. Sie können es sich als eine Form vorstellen:

Eine Medaillonform mit einem frisch entfernten Goldmedaillon

Sie können den Entwurf an mehreren Stellen auf Ihre Anwendung anwenden. Jedes Mal, wenn Sie es anwenden, erstellt der Entwurf eine neue Version seiner Struktur im Putz Ihrer Anwendung.

# 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)

Dies ist eine einfache Form für die Arbeit mit Bäumen. Jede Anwendung, die sich mit Bäumen befasst, sollte Zugang zu ihren Blättern, Wurzeln und Ringen bieten (nach Jahr). An sich ist es eine hohle Hülle - es kann nicht routen, es kann nicht reagieren, bis es einer Anwendung eingeprägt ist:

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")

Sobald es erstellt wurde, kann es mithilfe der register_blueprintFunktion in die Anwendung "eingeprägt" werden. Dadurch wird die Form der Blaupause in der Anwendung an den von angegebenen Stellen "eingeprägt" url_prefix.

Sean Vieira
quelle
5
Hier ist ein schöner Artikel zur Anwendungsstruktur mit Blaupausen. Exploreflask.com/de/latest/blueprints.html
Devasish
5
Ich bin immer noch verwirrt. Bedeutet das oak/leavesund fir\leaveszeigt auf denselben Code? Auch was ist der Zweck der Zeichenfolge moldinBlueprint("mold", __name__)
Codevalley
8
Ja, beides oak/leavesund fir/leaveswird von behandelt def leaves. "mold"ist der Name der Blaupause und wird zur Disambiguierung verwendet, wenn auf Routen Bezug genommen wird (z . B. someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira
2
Wie kann ich auf die url_prefixin der Funktion zugreifen ? Sagen Sie, um zu überprüfen, ob es Eiche oder Tanne ist? tree_mold.url_prefixgibt mir einNone
Mellkor
3
@ Mellkor - einfach verwenden url_for('.relative_route_name')(beachten Sie den führenden Punkt). Beispielsweise url_for('.roots')wird an jedem der bereitgestellten Punkte automatisch eine URL mit korrektem Gültigkeitsbereich bereitgestellt.
Sean Vieira
6

Wie in einem Kommentar von @Devasish ausgeführt , bietet dieser Artikel eine gute Antwort:

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

Zitat aus dem Artikel:

Ein Beispiel hierfür wäre Facebook. Wenn Facebook Flask verwendet, enthält es möglicherweise Blaupausen für die statischen Seiten (z. B. abgemeldet zu Hause, registrieren, ungefähr usw.), das Dashboard (dh den Newsfeed), die Profile (/ robert / about und / robert / photos), Einstellungen (/ settings / security und / settings / privacy) und vieles mehr. Diese Komponenten haben alle ein allgemeines Layout und Stile, aber jede hat auch ihr eigenes Layout

Dies ist eine sehr gute Interpretation, insbesondere der Teil "Wenn Facebook Flask verwendet". Es gibt uns eine konkrete Situation, um zu visualisieren, wie Blueprint tatsächlich funktioniert.

Tran Cuong
quelle
3

Auch ich bin selbst darauf gestoßen und war verwirrt, nachdem ich einige der Dokumentationsquellen gelesen hatte. Zuerst dachte ich, es wäre wie ein C # / Java-Implementierungsstil, bei dem Sie einige Dinge definieren, sich aber erst später darum kümmern müssen, sie zu definieren. Ich bin jedoch auf diese Seite gestoßen, was sie in sehr sehr Laienbegriffen (und ziemlich witzigen Ereignissen des aktuellen Tages) ausdrückt. https://hackersandslackers.com/flask-blueprints/

Im Wesentlichen besteht ein Vorteil, der im Link erwähnt wird und mir eine klare Vorstellung von der tatsächlichen Nutzung gibt, darin, dass ich die App effektiv logisch organisieren / in mehrere Teile unterteilen kann, die sich nur mit ihren eigenen Angelegenheiten befassen müssen. Es bietet also eine bestimmte Kapselung.

Bearbeiten: Ich verwende es derzeit, um meinen Webapps-Code zu segmentieren. Es war auch eine gute Entscheidung, denn ich fand, dass der Hauptdesigner das Frontend in Vue.js erstellen möchte. Was ich noch nicht verwendet habe, aber wenn ich mir die Projektdateien ansehe, sieht es viel chaotischer aus und bietet wahrscheinlich viele Kollisionsanfälligkeiten für Namenskollisionen.

LFMekz
quelle
0

Bei größeren Projekten sollte sich Ihr gesamter Code nicht in derselben Datei befinden. Stattdessen können Sie größere Codes in separate Dateien segmentieren oder aufteilen, hauptsächlich basierend auf der Funktionalität. Wie Ziegel, die eine Wand bilden.

Hoffe das hat geholfen. Da dies eine theoretische Frage ist, werden keine Codes veröffentlicht.

Henshal B.
quelle