Метод before_request
Метод before_request применяется к объекту Blueprint и
позволяет повесить функцию, которая будет выполняться перед
обработкой каждого запроса, привязанного к этому чертежу. Первым
параметром передаётся функция-обработчик. Если эта функция
возвращает не None, то её результат используется как ответ,
а основной обработчик маршрута не вызывается. Такой подход удобен
для проверки авторизации, установки соединения с базой данных или
логирования входящих запросов.
Синтаксис
@bp.before_request
def func_name():
...
Пример
Давайте зарегистрируем функцию, которая выводит сообщение перед каждым запросом к чертежу:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.before_request
def before():
print('before request')
@bp.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
После запроса к адресу '/' в консоли появится:
before request
Пример
Давайте прервём обработку запроса, вернув ответ прямо из
before_request:
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.before_request
def check():
return 'blocked'
@bp.route('/')
def index():
return 'hello'
app.register_blueprint(bp)
Результат выполнения кода для адреса '/':
blocked
Как видно, основной обработчик index не был вызван, так как
функция check вернула строку, а не None.
Пример
Давайте используем before_request вместе с глобальным
объектом g для передачи данных в обработчик:
from flask import Flask, Blueprint, g
app = Flask(__name__)
bp = Blueprint('bp', __name__)
@bp.before_request
def set_user():
g.user = 'abcde'
@bp.route('/')
def index():
return g.user
app.register_blueprint(bp)
Результат выполнения кода для адреса '/':
abcde
Смотрите также
-
класс
Blueprint,
который создаёт чертёж приложения -
метод
after_request,
который выполняет функцию после каждого запроса -
метод
teardown_request,
который выполняет функцию при завершении запроса -
метод
route,
который регистрирует обработчик для URL