我已经阅读了关于蓝图的官方Flask文档,甚至还有一两篇关于使用它们的博客文章。
我甚至在我的web应用程序中使用了它们,但我不完全理解它们是什么,或者它们如何适合我的应用程序作为一个整体。它如何与我的应用程序的实例相似,但又不完全相似?文档是全面的,但我寻求一个外行的解释或启发类比为我点燃它。当一位同事让我向他们解释弗拉斯克的蓝图时,我感到非常困惑,我选择在这里提问。
我已经阅读了关于蓝图的官方Flask文档,甚至还有一两篇关于使用它们的博客文章。
我甚至在我的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)
这是一个处理树的简单模型——它说任何处理树的应用程序都应该提供对树的叶子、根和年轮(按年)的访问。就其本身而言,它是一个空心壳——它不能路由,不能响应,直到它被应用程序铭记:
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指定的位置上“印上”蓝图的模具。
正如@Devasish的评论所指出的,这篇文章提供了一个很好的答案:
http://exploreflask.com/en/latest/blueprints.html
摘自文章:
Facebook就是一个例子。如果Facebook使用Flask,它可能会 有静态页面的蓝图(即签出主页,注册, 关于等),仪表板(即新闻提要),个人资料 (/robert/about和/robert/photos), Settings (/ Settings /security和 /settings/privacy)等等。这些组件都有一个共同点 布局和样式,但每个都有自己的布局
这是一个非常好的解释,特别是“如果Facebook使用Flask”这部分。它为我们提供了一个具体的情况来可视化Blueprint实际是如何工作的。
我自己也只是偶然发现了这个,在阅读了一些文档来源后感到困惑。起初我认为它像c# /Java OOP接口实现风格,你定义一些东西,但不必担心它的实现细节,直到以后。然而,我无意中发现了这一页,它用非常非常外行(而且相当滑稽的现代事件)的术语来描述它。https://hackersandslackers.com/flask-blueprints/
从本质上讲,链接中提到的一个好处是,我可以有效地将应用程序逻辑地组织/划分为几个只需要关心它自己事务的部分,这让我对它的实际使用情况有了清晰的了解。因此它提供了一些设计好的封装。
编辑:我目前正在使用它来分割我的webapps代码。这也是一个很好的决定,因为我发现首席设计师想用Vue.js制作前端。我还没有用过,但看看它的项目文件会看起来更加混乱,可能会提供许多命名冲突倾向的实例,由于文件具有类似的名称
对于较大的项目,所有代码不应该在同一个文件中。 相反,您可以根据功能将较大的代码分割到单独的文件中。就像砖砌墙一样。
一个简单的Flask应用
app = Flask(__name__)
一个蓝图的Flask应用程序
import from_any_module.part_1
import from_other_module.part_2
app = Flask(__name__)
app.register_blueprint(part_1)
app.register_blueprint(part_2)
上面的应用程序的蓝图
from flask import Blueprint
part_1 = Blueprint(part_1)
@part_1.route('/url')
def function()
return view