Метод record
Метод record применяется к объекту чертежа
Blueprint и сохраняет функцию, которая будет
вызвана при регистрации чертежа в приложении
Flask. Первым параметром передаётся функция
обратного вызова. Метод удобен для отложенной
инициализации ресурсов, настройки расширений и
модификации объекта приложения после его
привязки к чертежу.
В отличие от метода record_once, функция,
переданная в record, может быть выполнена
для каждого приложения, к которому применяется
чертёж. Если один и тот же чертёж регистрируется
несколько раз с разными именами, функция будет
вызвана повторно.
Синтаксис
@bp.record
def callback(setup_state):
pass
Функция обратного вызова принимает один аргумент -
объект состояния регистрации setup_state. Через
него доступны атрибуты app и blueprint,
которые ссылаются на приложение Flask и на сам
чертёж соответственно.
Пример
Давайте создадим чертёж и зарегистрируем функцию
через record, которая выведет имя приложения:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.record
def setup(setup_state):
print(setup_state.app.name)
@bp.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
Результат выполнения кода:
"app"
Пример
Давайте через record добавим глобальную
переменную в конфигурацию приложения:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.record
def setup(setup_state):
setup_state.app.config['GREETING'] = 'hello'
@bp.route('/')
def index():
return app.config['GREETING']
app.register_blueprint(bp)
Результат выполнения кода для адреса /:
hello
Пример
Давайте используем record для регистрации
фильтра шаблонов в приложении:
from flask import Flask, Blueprint, render_template
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.record
def setup(setup_state):
setup_state.app.jinja_env.filters['upper'] = str.upper
@bp.route('/')
def index():
return render_template('index.html', text='abcde')
app.register_blueprint(bp)
Содержимое шаблона:
<p>{{ text|upper }}</p>
Результат выполнения кода для адреса /:
<p>ABCDE</p>
Смотрите также
-
метод
record_once,
который выполняет функцию только один раз -
метод
register,
который регистрирует чертёж в приложении -
метод
make_setup_state,
который создаёт объект состояния регистрации -
класс
Blueprint,
который создаёт чертёж приложения