Flask蓝图(Blueprint)是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式,使得项目结构更清晰,代码更易于维护。
使用Flask蓝图,可以将相关功能的路由和视图函数打包在一个模块中,并将其注册到主应用中。这样可以实现模块化开发,每个蓝图负责不同的功能或子应用,提高了代码的可读性和可维护性。
创建蓝图对象:使用flask.Blueprint类创建蓝图对象。需要指定蓝图的名称和所在的包或模块。
from flask import Blueprint user_op = Blueprint('user', __name__)
定义路由和视图函数:在蓝图对象上使用装饰器来定义路由和对应的视图函数。
@user_op.route('/login', methods=['GET', 'POST']) def login(): # 处理登录逻辑 return 'Login Page'
注册蓝图:将蓝图对象注册到主应用中。
from flask import Flask app = Flask(__name__) app.register_blueprint(user_op)
这样,蓝图中定义的路由和视图函数就会和主应用一起生效了。
使用蓝图的Flask项目的一般目录结构:
account.py文件:
from flask import Blueprint ac = Blueprint('ac', __name__) @ac.route('/login') def login(): return 'Login' @ac.route('/logout') def logout(): return 'Logout'
admin.py文件:
from flask import Blueprint ad = Blueprint('ad', __name__, url_prefix='/admin') @ad.route('/index') def index(): return 'Admin-Index'
user.py文件:
from flask import Blueprint us = Blueprint('us', __name__) @us.before_request def auth_(): print('user-before_request中间件~') @us.route('/info') def info(): return 'Info'
__init__.py文件:
from flask import Flask from .account import ac from .admin import ad from .user import us app = Flask(__name__) app.register_blueprint(ac) app.register_blueprint(ad) app.register_blueprint(us)
manage.py文件:
from flask_demo.views import app if __name__ == '__main__': app.run()
通过上述demo项目,可以看出蓝图的三大实用功能:
做目录结构的划分。
路由隔离:蓝图允许自定义URL前缀,从而将路由与其他蓝图或主应用程序隔离开。这样可以避免路由冲突,并为各个功能模块提供独立的URL命名空间(蓝图的命名空间还可以通过使用endpoint参数来进一步定制,它允许为蓝图中的路由和视图函数定义自定义名称)。不同蓝图之间的路由可以相互独立存在,提高了代码的灵活性和可扩展性。
(比如:上述项目访问index路由的话就需要加上路由前缀/admin):
可以给指定蓝图加只对当前蓝图生效的中间件(如:before_request等)。而不是全局的!
除这三大实用功能外,蓝图还有以下不得不提到的优点: