Декоратор with_appcontext
Декоратор with_appcontext применяется к функциям,
которые регистрируются как команды Flask CLI. По умолчанию
команды запускаются вне контекста приложения, поэтому
обращение к current_app, g или базе данных
приводит к ошибке. Данный декоратор помещает выполнение
функции внутрь контекста приложения. Параметров у
декоратора нет - он просто оборачивает декорируемую
функцию.
Синтаксис
@with_appcontext
Пример
Давайте создадим команду, которая читает значение из
конфигурации приложения. Без контекста это вызвало бы
ошибку, поэтому применим with_appcontext:
from flask import Flask
from flask.cli import with_appcontext
import click
app = Flask(__name__)
app.config['GREETING'] = 'hello'
@app.cli.command('greet')
@with_appcontext
def greet():
from flask import current_app
click.echo(current_app.config['GREETING'])
Запустим команду в терминале:
flask greet
Результат выполнения кода:
hello
Пример
Давайте получим список маршрутов приложения внутри
команды. Для доступа к app.url_map нужен контекст
приложения:
from flask import Flask
from flask.cli import with_appcontext
import click
app = Flask(__name__)
@app.route('/')
def index():
return 'hello'
@app.cli.command('show-routes')
@with_appcontext
def show_routes():
from flask import current_app
for rule in current_app.url_map.iter_rules():
click.echo(rule.rule)
Запустим команду в терминале:
flask show-routes
Результат выполнения кода:
/
/static/<path:filename>
Смотрите также
-
команда
flask run,
которая запускает сервер разработки -
команда
flask shell,
которая открывает интерактивную оболочку -
команда
flask routes,
которая показывает список маршрутов -
декоратор
command,
который регистрирует команду CLI