Python 到底什么是烧瓶蓝图?

Python 到底什么是烧瓶蓝图?,python,flask,wsgi,Python,Flask,Wsgi,我读过蓝图,甚至是关于使用它们的博客文章 我甚至在我的web应用程序中使用过它们,但我不完全理解它们是什么,也不完全理解它们如何融入我的整个应用程序。它与我的应用程序实例有什么相似之处,但不完全相同?文档很全面,但我寻求一个门外汉的解释或一个启发性的类比来激发我的兴趣。当一位同事让我向他们解释我选择在这里询问的烧瓶蓝图时,我感到非常困惑。蓝图是生成web应用程序“部分”的模板。您可以将其视为一个模具: 您可以将蓝图应用到多个地方的应用程序中。每次应用它时,蓝图将在应用程序的石膏中创建其结构的新

我读过蓝图,甚至是关于使用它们的博客文章


我甚至在我的web应用程序中使用过它们,但我不完全理解它们是什么,也不完全理解它们如何融入我的整个应用程序。它与我的应用程序实例有什么相似之处,但不完全相同?文档很全面,但我寻求一个门外汉的解释或一个启发性的类比来激发我的兴趣。当一位同事让我向他们解释我选择在这里询问的烧瓶蓝图时,我感到非常困惑。

蓝图是生成web应用程序“部分”的模板。您可以将其视为一个模具:

您可以将蓝图应用到多个地方的应用程序中。每次应用它时,蓝图将在应用程序的石膏中创建其结构的新版本

# 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)
创建后,可以通过使用
register\u blueprint
功能在应用程序上“印象深刻”——这将在
url\u prefix

指定的位置在应用程序上“印象深刻”,如a中所述,本文提供了一个很好的答案:

引述文章:

Facebook就是一个例子。如果Facebook使用Flask,它可能会 有静态页面的蓝图(即注销主页、注册、, 关于等)、仪表板(即新闻提要)、配置文件 (/robert/about和/robert/photos)、设置(/settings/security和 /设置/隐私)等。这些组件都具有通用性 布局和样式,但每个都有自己的布局


这是一个很好的解释,尤其是“如果Facebook使用烧瓶”部分。它为我们提供了一个具体的情况,让我们能够直观地看到蓝图是如何工作的。

我自己也只是偶然发现了这一点,在阅读了一些文档来源后感到困惑。起初,我认为这就像C#/Java实现风格,您可以定义一些东西,但不必担心它的实现细节,直到后来。然而,我无意中发现了这一页,它用非常非常普通的术语(以及相当有趣的当今事件)来描述它

本质上,链接中提到的一个好处让我清楚地了解了它在现实世界中的使用情况,那就是我可以有效地逻辑地将应用程序组织/划分为几个部分,这些部分只需要关注它自己的事务。因此,它提供了一些设计的封装


编辑:我目前正在使用它来分割我的webapps代码。这也是一个很好的决定,因为我发现首席设计师希望在Vue.js中制作前端。我还没有使用过,但是查看它的项目文件会显得更加凌乱,并且可能会提供许多容易发生命名冲突的功能。

对于更大的项目,所有代码不应该在同一个文件中。 相反,您可以将较大的代码分段或拆分为单独的文件,主要基于功能。就像砖块砌成一堵墙

一个简单的烧瓶应用程序 蓝图烧瓶应用程序 上述应用程序中的蓝图
烧瓶蓝图帮助您创建应用程序的可重用实例。它通过在模块中组织项目来实现这一点。然后,这些模块被注册到主应用程序中。它们有助于创建应用程序工厂。

这是一篇关于使用蓝图的应用程序结构的好文章。我还是很困惑。这是否意味着
oak/leaves
fir\leaves
将指向相同的代码?另外,在
Blueprint(“mold”、\uuuu name\uuuu)
中,字符串
mold
的用途是什么?是的,
oak/leaves
fir/leaves
将由
def leaves
处理<代码>“mold”是蓝图的名称,用于在引用路由时消除歧义(例如
someBlueprint.routeName
anotherBlueprint.routeName
)。如何访问函数中的
url\u前缀
?比如说,检查它是橡木还是冷杉
tree\u mold.url\u前缀
为我提供了一个
None
@Mellkor-只需将
url\u用于('.relative\u route\u name')
(注意前导点)。例如,
url\u For('.roots')
将在每个挂载点自动提供范围正确的url。这不会回答用户的问题。他提到,;他使用过它们,并读过有关它们的文章。他需要一个关于烧瓶蓝图的低级解释。在引擎盖下,它们是如何工作的?
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")
app = Flask(__name__)
import from_any_module.part_1
import from_any_module.part_1

app.register_blueprint(part_1)
app.register_blueprint(part_2)

app.Flask(__name__)
from flask import Blueprint
part_1 = Blueprint(part_1)

@part_1.route('/url')
def function()
    return view