Que sont exactement les Blueprints Flask?

180

J'ai lu la documentation officielle Flask sur Blueprints et même un ou deux messages de blog sur leur utilisation.

Je les ai même utilisés dans mon application Web, mais je ne comprends pas complètement ce qu'ils sont ou comment ils s'intègrent dans mon application dans son ensemble. En quoi est-ce similaire à une instance de mon application mais pas tout à fait? La documentation est complète mais je cherche une explication profane ou une analogie éclairante pour la déclencher pour moi. J'étais suffisamment perplexe lorsqu'un collègue m'a demandé de leur expliquer un plan Flask que j'ai choisi de demander ici.

JoshieSimmons
la source

Réponses:

287

Un modèle est un modèle pour générer une "section" d'une application Web. Vous pouvez le considérer comme un moule:

Un moule à médaillon avec un médaillon en or fraîchement retiré

Vous pouvez prendre le plan directeur et l'appliquer à votre application à plusieurs endroits. Chaque fois que vous l'appliquez, le plan créera une nouvelle version de sa structure dans le plâtre de votre application.

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

Il s'agit d'un simple moule pour travailler avec des arbres - il dit que toute application qui traite des arbres devrait donner accès à ses feuilles, ses racines et ses anneaux (par année). En soi, c'est une coquille creuse - elle ne peut pas acheminer, elle ne peut pas répondre, jusqu'à ce qu'elle soit imprimée sur une application:

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

Une fois qu'il est créé, il peut être «impressionné» sur l'application en utilisant la register_blueprintfonction - cela «impressionne» le moule du plan sur l'application aux emplacements spécifiés par url_prefix.

Sean Vieira
la source
5
Voici un bel article pour la structure de l'application à l'aide de plans. exploreflask.com/en/latest/blueprints.html
Devasish
5
Je suis toujours confus. Est-ce que cela signifie oak/leaveset fir\leavespointera vers le même code? Aussi, quel est le but de la chaîne molddansBlueprint("mold", __name__)
Codevalley
8
Oui, les deux oak/leaveset fir/leavesseront gérés par def leaves. "mold"est le nom du plan et est utilisé pour clarifier les ambiguïtés en se référant aux routes (par exemple someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira
2
Comment puis-je accéder url_prefixà la fonction? Dites, pour vérifier si c'est du chêne ou du sapin? tree_mold.url_prefixme donne unNone
Mellkor
3
@Mellkor - utilisez simplement url_for('.relative_route_name')(notez le point de début ). Par exemple, url_for('.roots')fournira automatiquement une URL correctement étendue à chacun des points montés.
Sean Vieira
6

Comme souligné dans un commentaire de @Devasish , cet article apporte une bonne réponse:

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

Citant l'article:

Un exemple de cela serait Facebook. Si Facebook utilisait Flask, il pourrait avoir des plans pour les pages statiques (c'est-à-dire accueil déconnecté, registre, à propos, etc.), le tableau de bord (c'est-à-dire le fil d'actualité), les profils (/ robert / about et / robert / photos), settings (/ settings / security et / settings / privacy) et bien d'autres. Ces composants partagent tous une disposition et des styles généraux, mais chacun a également sa propre disposition

C'est une très bonne interprétation, en particulier la partie "si Facebook a utilisé Flask". Cela nous donne une situation concrète pour visualiser comment Blueprint fonctionne réellement.

Tran Cuong
la source
3

Moi aussi, je suis tombé dessus moi-même et j'étais confus après avoir lu quelques-unes des sources de documentation. Au début, je pensais que c'était comme le style d'implémentation C # / Java où vous définissez certaines choses mais que vous n'avez pas à vous soucier de le définir plus tard. Cependant, je suis tombé sur cette page qui la met en termes très très profanes (et assez hilarants sur les événements actuels). https://hackersandslackers.com/flask-blueprints/

Essentiellement, un avantage mentionné dans le lien et qui me donne une idée claire de son utilisation dans le monde réel est que je peux efficacement organiser / diviser logiquement l'application en plusieurs parties qui ne doivent se préoccuper que de ses propres affaires. Donc, il fournit une encapsulation conçue.

Edit: Je l'utilise actuellement pour segmenter le code de mes applications Web. C'était également une bonne décision car j'ai trouvé que le concepteur principal voulait créer l'interface dans Vue.js. Ce que je n'ai pas encore utilisé, mais en regardant ses fichiers de projet, cela semblerait beaucoup plus compliqué et fournirait probablement de nombreux noms sujets aux collisions.

LFMekz
la source
0

Pour les projets plus importants, tout votre code ne doit pas être dans le même fichier. Au lieu de cela, vous pouvez segmenter ou diviser des codes plus gros dans un fichier séparé, principalement basé sur la fonctionnalité. Comme des briques formant un mur.

J'espère que cela a aidé. Puisqu'il s'agit d'une question théorique, n'afficher aucun code.

Henshal B
la source