本次笔记主要聊一聊蓝图和视图函数。从刚开始学习Flask就接触到这两个概念,对它们的理解也越来越深。
首先问个问题,我们不用蓝图,可不可以做Flask项目?答案当然是可以。
不使用蓝图,直接创建应用实例
- 我们先创建应用实例app:
- 此时可以用工厂方法
create_app()
这样app = create_app()
创建。 - 或者还可以用
app = Flask(__name__)
来创建。
这两种方法的区别不在此赘述,推荐大家使用create_app()
。
- 之后,直接把视图函数注册到应用实例
app
上面即可。
装饰器模式下,可以把类似@app.route('/hi', methods = ['GET'])
这样的代码加在具体的视图函数上面,之后就可以使用了。
那么我们为什么还需要用到蓝图呢?
蓝图可以解决视图函数拆分文件的问题
可以想象,在应用比较大的时候,视图函数的数量也会变得庞大起来,此时如何管理它们,将成为一个问题。如果都放在一个文件里面显然是不合适的,如果放在多个文件里面,那么要怎么拆分它们呢?
蓝图就解决了视图函数分文件的问题。我们可以新建很多个蓝图,然后把不同业务的视图函数,注册到不同的蓝图上。
不过不要忘记了,蓝图不能独立存在,必须插到应用实例app
这个插板上面才可以使用。
蓝图:大型工程中分拆模块
除了视图函数,蓝图还可以包括很多静态文件、模板等。所以,虽然我们是从如何拆分视图函数来引入蓝图的使用,但实际上蓝图是为了在大型工程里面分拆不同的模块,而不是用来拆文件的。因此你也就明白它里面为什么除了视图函数,还会包含其他的文件了。
我们来看一个例子,比如做一个内容管理系统,我们分了三块内容:
- web(网站相关模板、文件)
- api
- cms(内容管理)
那么以上每一块内容都可以对应一个蓝图,这样就很清晰的划分了工程的模块。
蓝图、核心对象app的初始化
那么,如果你的应用还没有使用蓝图,你可以尝试引入蓝图,然后把之前注册到app上的视图函数直接注册到蓝图上,再把蓝图插入到app上面。
提到app,通常情况只有一个核心对象app,实际上可以有多个核心对象(使用的较少),这里知道这个概念即可。
核心对象app的初始化, 一般放到__init__.py
里面,也就是app包的初始化文件里。 def create_app():
蓝图的相关初始化,则是放到蓝图的初始化文件里面。