¿Qué son exactamente los planos de matraces?

180

Yo he leído la documentación oficial frasco en modelos e incluso uno o dos entradas de blog en su uso.

Incluso los he usado en mi aplicación web, pero no entiendo completamente qué son o cómo encajan en mi aplicación en general. ¿En qué se parece a una instancia de mi aplicación pero no del todo? La documentación es completa, pero busco una explicación laica o una analogía esclarecedora para despertarme. Estaba suficientemente perplejo cuando un colega me pidió que les explicara un plano del Frasco que decidí preguntar aquí.

JoshieSimmons
fuente

Respuestas:

287

Un plan es una plantilla para generar una "sección" de una aplicación web. Puedes pensarlo como un molde:

Un molde de medallón con un medallón de oro recién retirado

Puede tomar el plano y aplicarlo a su aplicación en varios lugares. Cada vez que lo aplique, el plan creará una nueva versión de su estructura en el yeso de su aplicación.

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

Este es un molde simple para trabajar con árboles: dice que cualquier aplicación que trate con árboles debería proporcionar acceso a sus hojas, raíces y anillos (por año). Por sí mismo, es un caparazón hueco: no puede enrutar, no puede responder, hasta que se imprime en una aplicación:

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

Una vez creado, puede quedar "impresionado" en la aplicación mediante el uso de la register_blueprintfunción; esto "impresiona" el molde del plano en la aplicación en las ubicaciones especificadas por url_prefix.

Sean Vieira
fuente
55
Aquí hay un buen artículo para la estructura de la aplicación utilizando planos. exploreflask.com/en/latest/blueprints.html
Devasish
55
Todavía estoy confundido ¿Eso significa oak/leavesy fir\leavesapuntará al mismo código? Además, ¿cuál es el propósito de la cadena moldenBlueprint("mold", __name__)
Codevalley
8
Sí, ambos oak/leavesy fir/leavesserán manejados por def leaves. "mold"es el nombre del plano y se usa para la desambiguación cuando se hace referencia a rutas (por ejemplo, someBlueprint.routeNamevs. anotherBlueprint.routeName).
Sean Vieira
2
¿Cómo puedo acceder a url_prefixen la función? Digamos, para comprobar si es de roble o abeto? tree_mold.url_prefixme da unNone
Mellkor
3
@Mellkor: simplemente use url_for('.relative_route_name')(tenga en cuenta el punto inicial ). Por ejemplo, url_for('.roots')proporcionará una URL correctamente definida en cada uno de los puntos montados automáticamente.
Sean Vieira
6

Como se señaló en un comentario de @Devasish , este artículo ofrece una buena respuesta:

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

Citando del artículo:

Un ejemplo de esto sería Facebook. Si Facebook usó Flask, podría tener planos para las páginas estáticas (es decir, inicio de sesión cerrado, registro, acerca de, etc.), el panel de control (es decir, la fuente de noticias), perfiles (/ robert / about y / robert / photos), configuración (/ configuración / seguridad y / configuración / privacidad) y muchos más. Todos estos componentes comparten un diseño y estilos generales, pero cada uno tiene su propio diseño también

Esta es una muy buena interpretación, especialmente la parte "si Facebook usara Flask". Nos da una situación concreta para visualizar cómo funciona realmente Blueprint.

Tran Cuong
fuente
3

Yo también me tropecé con esto y me confundí después de leer algunas de las fuentes de documentación. Al principio pensé que era como el estilo de implementación de C # / Java donde se definen algunas cosas, pero no tiene que preocuparse de que lo definan hasta más tarde. Sin embargo, me encontré con esta página, que la pone en términos muy muy simples (y bastante divertidos). https://hackersandslackers.com/flask-blueprints/

Esencialmente, uno de los beneficios que se menciona en el enlace y que me da una idea clara de su uso en el mundo real es que puedo organizar / dividir lógicamente la aplicación en varias partes que solo deben ocuparse de sus propios asuntos. Por lo tanto, proporciona una encapsulación diseñada.

Editar: Actualmente lo estoy usando para segmentar mi código de webapps. También fue una buena decisión porque descubrí que el diseñador principal quiere hacer la interfaz en Vue.js. Lo que aún no he usado, pero mirar sus archivos de proyecto se vería mucho más desordenado y probablemente proporcionaría muchos nombres propensos a colisiones.

LFMekz
fuente
0

Para proyectos más grandes, todo su código no debe estar en el mismo archivo. En su lugar, puede segmentar o dividir códigos más grandes en un archivo separado, principalmente en función de la funcionalidad. Como ladrillos formando una pared.

Espero que esto haya ayudado. Como se trata de una pregunta teórica, no se publican códigos.

Henshal B
fuente