Flask文档笔记-蓝图(Blueprint)

Flask是个很轻便的框架,如果网站简单,就用一个app.py就把所有业务逻辑都写完了。但是如果业务逻辑多,需要多人开发,写一个文件,就很头疼。

所以Flask用蓝图(Blueprint)的概念,使得代码可以进行拆分。Blueprint的工作方式和Flask对象很接近,但两者又不一样。

创建Blueprint

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound
simple_page = Blueprint('simple_page', __name__,
template_folder='templates')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
try:
return render_template('pages/%s.html' % page)
except TemplateNotFound:
abort(404)

这是官网上的一个例子。其实就是创建一个Blueprint对象,指定路由,绑定视图函数。这样就可以把相关的业务逻辑,页面模板,静态文件组成一个package。通过这种方式把一个工程,拆解成不用的模块,减少耦合,并行开发。

注册Blueprint

Blueprint需要在Flask对象中注册,这样才能确定最终的URL。

1
2
3
4
5
from flask import Flask
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page, url_prefix='/page')

通过url_prefix就可以确定蓝图的url路由。同时蓝图还能提供子域名的方式进行路由。使用subdomain='www.lutieg.com’参数可以实现指定动态子域名的方式。还可以通过传入参数的方式指定URL

参考链接:

1, http://dormousehole.readthedocs.io/en/latest/blueprints.html

2, https://spacewander.github.io/explore-flask-zh/7-blueprints.html

3, https://www.zhihu.com/question/31748237