Python的蓝图是什么?

Author Avatar
vogel 12月 24,2020
  • 在其它设备中阅读本文章

介绍

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"