API объекта Blueprint во Flask
Blueprint используется для разделения приложения на повторно используемые модули. Каждый Blueprint может иметь собственные маршруты, шаблоны, статические файлы и хуки.
Способ создания:
bp = Blueprint("auth", __name__)
Параметры конструктора
| Параметр | Type | Значение по умолчанию | Описание |
|---|---|---|---|
| name | str | Обязательный | Имя Blueprint, используемое для префикса эндпоинта в url_for |
| import_name | str | Обязательный | Имя модуля, в котором находится Blueprint, используется для поиска ресурсов. Обычно передаётся __name__. |
| static_folder | str | Отсутствует | Папка статических файлов Blueprint |
| static_url_path | str | Отсутствует | URL-путь, по которому доступны статические файлы. |
| template_folder | str | Отсутствует | Папка шаблонов Blueprint |
| url_prefix | str | Отсутствует | Общий префикс для всех маршрутов в Blueprint, например, "/auth". |
| subdomain | str | Отсутствует | Поддомен, сопоставляемый с маршрутами Blueprint |
| url_defaults | dict | Отсутствует | Параметры URL по умолчанию для маршрутов Blueprint |
| root_path | str | Отсутствует | Корневой путь Blueprint, обычно определяется автоматически |
| cli_group | str | Отсутствует | Имя группы CLI-команд. По умолчанию используется имя blueprint. |
Основные атрибуты
| Свойство | Type | Описание |
|---|---|---|
| name | str | Имя blueprint, используемое в качестве префикса эндпоинта после регистрации |
| cli | AppGroup | Группа CLI-команд, специфичная для blueprint, в которую можно добавлять пользовательские команды. |
| has_static_folder | bool | Настроена ли папка статических файлов |
Методы маршрута
Использование blueprints такое же, как в приложении Flask, за исключением того, чтоappнужно заменить наbp:
| Методы | Описание |
|---|---|
| route(rule, **options) | Декоратор, который привязывает URL к функции представления. |
| get / post / put / delete / patch(rule, **options) | Декораторы-сокращения для HTTP-методов |
| add_url_rule(rule, endpoint, view_func, **options) | Программное добавление правил URL |
Декоратор хука
Хуки blueprint влияют только на маршруты внутри blueprint:
| Методы | Описание |
|---|---|
| before_request | Выполняется перед всеми запросами внутри blueprint |
| after_request | Выполняется после ответа на запрос внутри blueprint |
| teardown_request | Выполняется при уничтожении контекста запроса внутри blueprint |
| errorhandler(code_or_exception) | Обработчики ошибок внутри blueprint |
| url_value_preprocessor | Препроцессоры значений URL внутри blueprint |
| url_defaults | Параметры URL по умолчанию внутри blueprint |
| template_filter / template_test / template_global | Фильтры / тесты / глобальные функции шаблонов Blueprint. |
Методы, специфичные для Blueprint
| Методы | Описание |
|---|---|
| register(app, options) | Регистрирует Blueprint в приложении Flask. Вызывается изнутри app.register_blueprint() |
| record(func) | Регистрирует функцию обратного вызова, которая вызывается, когда Blueprint регистрируется в приложении |
| record_once(func) | То же, что и record, но выполняется только один раз, когда Blueprint регистрируется несколько раз |
| make_setup_state(app, options) | Создаёт объект состояния регистрации Blueprint |
| send_static_file(filename) | Отправляет файл из статической папки Blueprint |
| open_resource(resource, mode="rb") | Открывает файл ресурса в корневом пути Blueprint |
Параметры options при регистрации blueprint
Вызовapp.register_blueprint(bp, **options)При вызове можно передать:
| Параметр | Описание |
|---|---|
| url_prefix | Переопределить префикс URL blueprint |
| subdomain | Переопределить поддомен blueprint |
| url_defaults | Переопределить значения по умолчанию URL blueprint |
| name | Переименовать blueprint (один и тот же blueprint можно зарегистрировать несколько раз, каждый раз с другим именем) |
Примеры кода
Пример
from flask import Blueprint, render_template
# Создание blueprint
bp = Blueprint("blog", __name__,
url_prefix="/blog",
template_folder="templates",
static_folder="static")
# Зарегистрируйте маршруты
@bp.route("/")
def index():
return render_template("blog/index.html")
@bp.route("/<int:post_id>")
def show(post_id):
return f"Показать пост {post_id}"
# Хуки Blueprint
@bp.before_request
def check_login():
# Применяется только к маршрутам /blog/*
pass
# Зарегистрировать в приложении
# app.register_blueprint(bp)
# Создание blueprint
bp = Blueprint("blog", __name__,
url_prefix="/blog",
template_folder="templates",
static_folder="static")
# Зарегистрируйте маршруты
@bp.route("/")
def index():
return render_template("blog/index.html")
@bp.route("/<int:post_id>")
def show(post_id):
return f"Показать пост {post_id}"
# Хуки Blueprint
@bp.before_request
def check_login():
# Применяется только к маршрутам /blog/*
pass
# Зарегистрировать в приложении
# app.register_blueprint(bp)