blueprint(蓝本/蓝图)学习笔记

在按《Flask Web开发:基于Python的Web应用开发实战》实践的过程中,我一直有一个疑问,即蓝本的优势在哪里
按照书中的操作,我们从一开始的做的

app = Flask(__name__)

@app.route(path)
def XXX
    return OOO

似乎只是变成了

app = Flask(__name__)
main = Blueprint('main',__name__)
app.register_blueprint(main)


@main.route(path)
def XXX
    return OOO

按FLask官方的说法,蓝本可以很好地帮助你简化工作,但我只感觉多了几个步骤,没能体会到其好处
于是昨天再去调查,才了解到蓝本的正确使用方法
《Explore Flask》中文翻译 蓝本给了我很大启发,看完之后,我认为《Flask Web开发》可以补充两点内容:

1. 组织(网站)项目的两种架构

书里的auth蓝本,负责登录等相关功能,也有专门的url前缀,所以它即是功能式,也是分区式
对没有web开发经验的读者,不容易自行领悟这两种架构,最好能提到一下

2. 蓝本的重要功能 - 可通过蓝图提供模板过滤器、静态文件、模板和其它功能

书中创建了/auth文件夹,auth蓝本位于此文件夹里
但作者没有为auth蓝本配置template_folder参数,而是解释了该蓝本对应的templdate文件夹所在位置,即/template/auth
这点很让人困惑,不管auth蓝本是功能式还是分区式,其相关资源应该被尽可能集中到一起,这点恰恰是蓝本的设计初衷和优势
我觉得更好的做法是创建/auth/template文件夹,并在通过template_folder参数,定义蓝本的相关资源的所在位置

最后,总结一下
1 . 通常蓝本是指继承Blueprint的那个对象,很多时候也指代Flask中这种设计思路
2 . 蓝图的基本设想是它们记录注册到一个应用时的操作执行情况。 当从一个端点到另一端分发请求和生成 URL 时,Flask 关联视图函数和蓝图。 -摘自官网
3 . 蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合 -摘自《Explore Flask》中文翻译
4 . 我们可以通过蓝本有效地组织项目

你可能感兴趣的:(blueprint,flask)