Ein Entwurf ist eine Vorlage zum Generieren eines "Abschnitts" einer Webanwendung. Sie können es sich als eine Form vorstellen:
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_blueprint
Funktion in die Anwendung "eingeprägt" werden. Dadurch wird die Form der Blaupause in der Anwendung an den von angegebenen Stellen "eingeprägt" url_prefix
.
oak/leaves
undfir\leaves
zeigt auf denselben Code? Auch was ist der Zweck der Zeichenfolgemold
inBlueprint("mold", __name__)
oak/leaves
undfir/leaves
wird von behandeltdef leaves
."mold"
ist der Name der Blaupause und wird zur Disambiguierung verwendet, wenn auf Routen Bezug genommen wird (z . B.someBlueprint.routeName
vs.anotherBlueprint.routeName
).url_prefix
in der Funktion zugreifen ? Sagen Sie, um zu überprüfen, ob es Eiche oder Tanne ist?tree_mold.url_prefix
gibt mir einNone
url_for('.relative_route_name')
(beachten Sie den führenden Punkt). Beispielsweiseurl_for('.roots')
wird an jedem der bereitgestellten Punkte automatisch eine URL mit korrektem Gültigkeitsbereich bereitgestellt.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:
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.
quelle
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.
quelle
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.
quelle