Flask蓝图
蓝图(Blueprint)在 Flask 中是一个用于组织多个模块化子应用的强大工具。它允许开发者将不同的功能模块划分到不同的包或目录中,使得大型项目更加易于管理和维护。
一、不使用蓝图
在不使用蓝图的情况下,可能会将所有的视图函数放在一个文件中,或者将它们分散在多个文件中,但都在同一个包内。
-
目录结构
-
-templates/ -views/__init__.pyuser.pyorder.py -app.py
-
-
文件内容
-
# app.py from views import app if __name__ == '__main__':app.run()
-
# init.py from flask import Flask app = Flask(__name__) from . import order from . import user
-
# user.py from . import app @app.route('/user') def user():return 'user'
-
二、使用蓝图
使用蓝图可以更好地组织项目结构,特别是在中大型系统中。
-
目录结构
-
- flask_project/ # 项目名- src/ # 核心文件- __init__.py # 包的初始化文件,实例化得到app对象- static/ # 静态文件- templates/ # 模板- views/ # 视图函数和类- user.py- order.py- manage.py # 启动文件
-
-
文件内容
-
# manage.py from src import app if __name__ == '__main__':app.run(debug=True, port=3333)
-
# __init__.py from flask import Flask app = Flask(__name__)from .views.user import user_app app.register_blueprint(user_app)
-
# user.py from flask import Blueprint user_app = Blueprint('user_app', __name__, url_prefix='/user')@user_app.route('/') def user_index():return 'User Index Page'
-
-
使用蓝图步骤
-
实例化蓝图对象: 在每个视图模块中,创建一个蓝图实例,并指定蓝图的名字和模板文件夹(如果与默认位置不同)。
from flask import Blueprint user_app = Blueprint('user', __name__, template_folder='../templates')
-
使用蓝图注册路由和请求扩展: 使用蓝图对象来注册路由和请求钩子。
@user_app.route('/login') def login():return 'login'
-
在应用中注册蓝图: 在主应用实例中,通过
register_blueprint
方法注册蓝图。可以指定一个url_prefix
,使得所有蓝图中的路由都会添加该前缀。from flask import Flask app = Flask(__name__)from . import user app.register_blueprint(user.user_app, url_prefix='/user')
-