Un plan es una plantilla para generar una "sección" de una aplicación web. Puedes pensarlo como un molde:
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_blueprint
función; esto "impresiona" el molde del plano en la aplicación en las ubicaciones especificadas por url_prefix
.
oak/leaves
yfir\leaves
apuntará al mismo código? Además, ¿cuál es el propósito de la cadenamold
enBlueprint("mold", __name__)
oak/leaves
yfir/leaves
serán manejados pordef leaves
."mold"
es el nombre del plano y se usa para la desambiguación cuando se hace referencia a rutas (por ejemplo,someBlueprint.routeName
vs.anotherBlueprint.routeName
).url_prefix
en la función? Digamos, para comprobar si es de roble o abeto?tree_mold.url_prefix
me da unNone
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.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:
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.
fuente
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.
fuente
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.
fuente