蓝本
蓝本(blueprint),在概念上类似子程序。借助蓝本,可根据功能模块对程序进行拆分。每个功能模块创建一个蓝本对象,视图函数注册到关联的蓝本对象。每个蓝本可以设定不同的URL前缀,注册错误处理函数,使用不同的模版和静态文件夹等
from flask import Flask, Blueprint
app = Flask(__name__)
main_bp = Blueprint('main', __name__)
auth_bp = Blueprint('auth', __name__)
@main_bp.route('/settings', methods=['GET', 'POST'])
@login_required
def settings():
...
@auth_bp.route('/login', methods=['GET', 'POST'])
def login():
...
app.register_blueprint(main_bp)
app.register_blueprint(auth_bp)
工厂函数
工厂函数,或程序工厂,即把创建程序的操作封装到一个函数中,可以根据传入参数动态调整配置。
在工厂函数内,先创建程序实例,并在函数内完成初始化扩展、注册蓝本、注册各种处理函数等一系列操作,最后返回可以直接运行的程序实例;其可以接受配置名称作为参数,在内部加载对应的配置文件或配置对象,实现按需创建加载不同配置的程序实例。
按照惯例,工厂函数一般会被命名为create_app或make_app。
from flask import Flask
def create_app(config_name='development'):
app = Flask(__name__)
app.config.from_object(config[config_name])
# 注册蓝本
app.register_blueprint(main_bp)
app.register_blueprint(auth_bp)
# 初始化扩展
db.init_app(app)
login_manager.init_app(app)
# 上下文处理函数
@app.context_processor
def inject_user(): # 函数名可以随意修改
user = db.session.execute(select(User)).scalar()
return dict(user=user)
# 错误处理函数
...
# 自定义命令函数
...
return app
包
目录下增加一个—init.py文件,python就会把这个目录作为一个包,而不是普通目录;