Метод before_request
Метод before_request применяется к приложению Flask и позволяет
выполнить код до того, как запрос будет передан в функцию-обработчик.
Функция, зарегистрированная через этот метод, не принимает аргументов
и может либо вернуть None, чтобы продолжить обработку запроса,
либо вернуть ответ, чтобы прервать выполнение и сразу отправить его клиенту.
Если зарегистрировано несколько функций через before_request,
они вызываются в порядке регистрации. Если хотя бы одна из них вернула
ответ, остальные функции и обработчик маршрута не выполняются.
Синтаксис
@app.before_request
def func_name():
...
Пример
Давайте зарегистрируем функцию, которая выводит сообщение в консоль перед каждым запросом:
from flask import Flask
app = Flask(__name__)
@app.before_request
def before():
print('before request')
@app.route('/')
def index():
return 'hello'
После запуска сервера и обращения к адресу / в консоли появится
сообщение, а в браузере отобразится результат работы обработчика:
hello
Пример
Давайте вернём ответ из функции before_request, чтобы прервать
обработку запроса:
from flask import Flask
app = Flask(__name__)
@app.before_request
def before():
return 'page found'
@app.route('/')
def index():
return 'hello'
Результат выполнения кода для адреса /:
page found
Пример
Давайте используем before_request для проверки авторизации
и пропуска только тех запросов, у которых есть нужный заголовок:
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def check_auth():
if request.headers.get('X-Token') != 'abcde':
return 'user denied'
@app.route('/')
def index():
return 'hello'
Результат выполнения кода для запроса без заголовка X-Token:
user denied
Результат выполнения кода для запроса с заголовком
X-Token: abcde:
hello
Смотрите также
-
метод
after_request,
который выполняет функцию после каждого запроса -
метод
teardown_request,
который выполняет функцию при завершении обработки запроса -
метод
route,
который регистрирует обработчик для указанного URL -
класс
Flask,
который представляет приложение Flask