Python的蓝图是什么?
介绍
Flask是一个轻量级的python web框架,相对于django,flask只需要很简单的几行代码就可以跑起一个小型的web后台。但是当flask项目开始慢慢扩大的时候,就会出现代码过于混乱,不好管理等现象。此时就需要用到flask的蓝图功能
详细
如果用过django就很容易理解蓝图功能
可以把蓝图比喻成一个app,假如需要写一个论坛,论坛会包含很多的模块。比如:用户管理、文章管理等。 为了方便管理代码,就使用flask创建一个用户管理的蓝图、一个文章管理的蓝图,再把它们联合起来运行
先上一段基础的flask代码(start.py)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def startIndex():
return "I'm start index"
if __name__ == "__main__":
app.run('127.0.0.1', 80, debug=True)
在执行这个文件后,我们就可以通过 http://127.0.0.1/ 访问,会看到"I'm start index"的字样
一个论坛肯定不会只有'/'这一条路由,如果把所有路由都写在同一个py文件里,那会对后期维护造成极大的困扰
创建一个蓝图
上一段创建蓝图的代码(article.py)
from flask import Blueprint
article = Blueprint('blog', __name__)
@article.route('/')
def articleIndex():
return "I'm article index"
可以看到我们首先需要引用flask的 Blueprint 模块,然后像创建普通flask一样创建一个Blueprint对象,其中第一个参数为该app的名字,会在使用url_for()的时候用到。一个flask项目里蓝图的名字不可以重复。
接着就是给该app创建路由,可能有的人会疑惑,为什么article的路由也是'/',不会和start.py里的路由冲突吗?
接下来回到start.py
from flask import Flask
from article import article
app = Flask(__name__)
app.register_blueprint(article, url_prefix='/article')
可以看到多了两行代码,第一个是从article文件引用名为article的Blueprint对象。
第二就是注册一个蓝图,第一个参数为蓝图对象。重点在第二个参数,我们设置了 url_prefix='/article' 。 这样当用户访问 http://127.0.0.1/article/ 的时候,就会在article的蓝图里寻找'/'这个路由,而不是在start.py里找'/'路由,因此避免了冲突
访问http://127.0.0.1/article/ 时,就会看到"I'm article index"