blueprint被翻译成蓝图,设计图,计划大纲,在flask框架中,blueprint的含义更偏向于设计大纲。如果一个基于flask的web app是一篇论文的话,那么blueprint就是论文的大纲,每个大纲是明显区别于其他部分的功能,所有的功能组成了这篇论文。
现在,我们以一个较大型的网站(简单的网站就没有必要使用blueprint了)为例说明blueprint的用法。几乎每个网站都有前台和后台之分,在很多情况下,前后台是由不同的开发者完成,这些开发者都有自己的工作目录,他们可不希望自己的代码与别人的混杂在一起,难以区分,并且还要解决很多的冲突(confict),尤其,他们不希望把所有的路由都写在一起,他们只希望以不同的url前缀(url_prefix)来隔离不同的功能。
前台应用声明一个blueprint
from flask import Blueprint,render_template
front = Blueprint('front',__name__)
@front.route('/front')
def front_show():
return render_template('front/index.html')
front/index.html
文件的内容:
Hi,this is front.index.html page
后台开发者声明另一个blueprint
from flask import Blueprint,render_template
front = Blueprint('backend',__name__)
@front.route('/backend')
def front_show():
return render_template('backend/index.html')
backend/index.html
文件的内容:
Hi,this is backend.index.html page
在入口文件中注册这两个blueprint
from flask import Flask
from front import front
from backend import backend
app = Flask(__name__)
app.register_blueprint(front.front)
app.register_blueprint(backend.backend)
if __name__ == '__main__':
app.run(port=7777)
用浏览器访问localhost:7777/front,localhost:7777/backend,可以看到不同的网页。
这不仅是入口文件变得很干净的问题,最重要的是blueprint将不同的功能以url为单位区分开了,实现了很好的模块化。
网友评论