Answers:
蓝图是用于生成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)
这是处理树木的简单模型-它说与树木打交道的任何应用程序都应提供对其叶子,根和环的访问(按年)。就其本身而言,它是一个中空的外壳-它无法路由,无法响应,直到被应用程序打动为止:
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")
一旦创建它,就可以通过使用register_blueprint
功能将其“打动”在应用程序上-这在所指定的位置“打动”应用程序上的蓝图模具url_prefix
。
oak/leaves
并且fir\leaves
将指向相同的代码?此外,什么是字符串的目的,mold
在Blueprint("mold", __name__)
oak/leaves
与fir/leaves
将被处理def leaves
。 "mold"
是蓝图的名称,在引用路线(例如someBlueprint.routeName
vs. anotherBlueprint.routeName
)时用于消除歧义。
url_prefix
该功能中的?说,要检查是橡木还是冷杉?tree_mold.url_prefix
给我一个None
url_for('.relative_route_name')
(注意前导点)。例如,url_for('.roots')
将在每个安装点自动提供正确范围的URL。
正如@Devasish的评论中指出的那样,本文提供了一个很好的答案:
http://exploreflask.com/en/latest/blueprints.html
从文章引用:
一个例子就是Facebook。如果Facebook使用Flask,它可能具有静态页面(即,登出的首页,注册,关于等),仪表板(即新闻提要),个人资料(/ robert / about和/ robert / photos)的蓝图,设置(/ settings /安全性和/ settings / privacy)等等。这些组件都具有通用的布局和样式,但是每个组件也都有自己的布局
这是一个很好的解释,尤其是“如果Facebook使用Flask”部分。它为我们提供了一个具体情况,以可视化蓝图的实际工作方式。
我自己也偶然发现了这个问题,在阅读了一些文档资料后感到困惑。起初,我认为它就像C#/ Java实现风格,您可以定义一些东西,而不必担心以后定义它。但是,我偶然发现了该页面,将其置于非常普通的外行(以及当下颇为热闹的当下事件)术语。https://hackersandslackers.com/flask-blueprints/
从本质上讲,链接中提到的一项好处是使我可以有效地逻辑组织/划分,从而使我对它在现实世界中的使用情况有一个清晰的认识。应用程序为几个部分,这些部分只需要关心它自己的事务,就。因此,它提供了一些设计好的封装。
编辑:我目前正在使用它来细分我的webapps代码。这也是一个很好的决定,因为我发现首席设计师希望在Vue.js中成为前端。我还没有使用过,但是查看它的项目文件看起来会更加混乱,并且可能提供很多命名冲突的倾向。