API командной строки Flask
Flask построил свой инструмент командной строки на Click.
С помощьюflaskЗапускайте приложения и управляйте задачами с помощью команд.
Все классы CLI находятся вflask.cliв модуле.
FlaskGroup
Основная группа команд Flask. Черезflaskиспользование команды.
| Параметр | Описание |
|---|---|
| add_default_commands=True | Добавлять ли команды по умолчанию, такие как run, shell, routes |
| create_app=None | Функция фабрики приложения, возвращает экземпляр Flask |
| add_version_option=True | Добавлять ли опцию --version |
| load_dotenv=True | Загружать ли файлы .env и .flaskenv |
| set_debug_flag=True | Следует ли устанавливать флаг отладки на основе переменных окружения |
AppGroup
Базовый класс для групп CLI-команд приложения и blueprint. Черезapp.cliилиbp.cliдобавляйте пользовательские команды.
| Методы | Описание |
|---|---|
| command(*args, **kwargs) | Регистрирует CLI-команды. По умолчанию автоматически оборачивает в with_appcontext |
| group(*args, **kwargs) | Регистрирует группы подкоманд. По умолчанию в качестве класса группы используется AppGroup. |
AppGroup.command() включён по умолчаниюwith_appcontext=True, что означает, что ваши функции команд автоматически получают контекст приложения. Если это не нужно, передайтеwith_appcontext=False。
ScriptInfo
Хранит информацию о среде выполнения скрипта, используемую для загрузки приложения. Обычно не требуется ручного вмешательства.
| Свойство | Описание |
|---|---|
| app_import_path | Путь импорта приложения (значение опции --app) |
| create_app | Функция-фабрика приложения |
| data | Словарь произвольных дополнительных данных |
| load_app() | Загружает и возвращает экземпляр приложения Flask |
Вспомогательные функции
| Функция | Описание |
|---|---|
| with_appcontext(f) | Декоратор. Обеспечивает выполнение декорируемой функции в контексте приложения |
| pass_script_info(f) | Декоратор. Передаёт экземпляр ScriptInfo в функцию в качестве первого аргумента |
| load_dotenv(path) | Загружает переменные окружения из файла .env |
Команды по умолчанию
| Команда | Описание | Общие параметры |
|---|---|---|
| flask run | Запустите сервер разработки | --host, --port, --debug, --reload/--no-reload |
| flask shell | Запустить интерактивную оболочку Python Shell | Автоматически загружать контекстные переменные, такие как app, g |
| flask routes | Показать все зарегистрированные маршруты | --sort (endpoint/methods/domain/rule/match), --all-methods |
Стандартные опции
| Параметры | Описание |
|---|---|
| -A / --app IMPORT | Укажите модуль и экземпляр приложения, например "app:create_app()" |
| --debug / --no-debug | Включить/отключить режим отладки |
| -e / --env-file FILE | Укажите путь к файлу .env |
| --version | Показать версии Flask и зависимостей |
Примеры кода
Пример
from flask import Flask
app = Flask(__name__)
# Регистрация пользовательских команд
@app.cli.command("init-db")
def init_db_command():
"""Инициализировать базу данных"""
print("База данных инициализирована.")
# Регистрация команды с аргументами
@app.cli.command("greet")
@app.cli.option("--name", "-n", default="ПРИМЕР", help="Цель приветствия")
def greet_command(name):
"""Отправить приветствие"""
print(f"Привет, {name}!")
# Зарегистрировать группу подкоманд
user_cli = app.cli.group("user")
@user_cli.command("list")
def list_users():
"""Список всех пользователей"""
print("Вывод списка пользователей...")
@user_cli.command("create")
@user_cli.option("--username", required=True)
def create_user(username):
"""Создать нового пользователя"""
print(f"Создание пользователя: {username}")
# Использование:
# flask init-db
# flask greet --name World
# flask user list
# flask user create --username example
app = Flask(__name__)
# Регистрация пользовательских команд
@app.cli.command("init-db")
def init_db_command():
"""Инициализировать базу данных"""
print("База данных инициализирована.")
# Регистрация команды с аргументами
@app.cli.command("greet")
@app.cli.option("--name", "-n", default="ПРИМЕР", help="Цель приветствия")
def greet_command(name):
"""Отправить приветствие"""
print(f"Привет, {name}!")
# Зарегистрировать группу подкоманд
user_cli = app.cli.group("user")
@user_cli.command("list")
def list_users():
"""Список всех пользователей"""
print("Вывод списка пользователей...")
@user_cli.command("create")
@user_cli.option("--username", required=True)
def create_user(username):
"""Создать нового пользователя"""
print(f"Создание пользователя: {username}")
# Использование:
# flask init-db
# flask greet --name World
# flask user list
# flask user create --username example