Командная строка интерфейс
Установка Flask устанавливает скрипт flask, интерфейс командной строки Click, в вашей виртуальной среде. Выполняясь из терминала, этот скрипт предоставляет доступ к встроенным, расширенным и определённым приложением командам. Опция --help предоставит больше информации о любых командах и опциях.
Обнаружение приложения
Команда flask устанавливается Flask, а не вашим приложением; ей необходимо указать, где найти ваше приложение, чтобы использовать его. Опция --app используется для указания способа загрузки приложения.
Хотя --app поддерживает множество способов указания приложения, в большинстве случаев это должно быть просто. Вот типичные значения:
- (ничего)
-
Импортируется имя «app» или «wsgi» (в качестве файла “.py” или пакета), автоматически обнаруживая приложение (
appилиapplication) или фабрику (create_appилиmake_app). -
--app hello -
Импортируется заданное имя, автоматически обнаруживая приложение (
appилиapplication) или фабрику (create_appилиmake_app).
--app состоит из трёх частей: необязательного пути, устанавливающего текущую рабочую директорию, файла Python или импорта с точкой, и необязательного имени переменной экземпляра или фабрики. Если имя является фабрикой, за ним могут следовать аргументы в скобках. Следующие значения демонстрируют эти части:
-
--app src/hello -
Устанавливает текущую рабочую директорию в
srcи затем импортируетhello. -
--app hello.web -
Импортирует путь
hello.web. -
--app hello:app2 -
Использует экземпляр Flask
app2вhello. -
--app 'hello:create_app("dev")' -
Вызывается фабрика
create_appвhelloсо строкой'dev'в качестве аргумента.
Если --app не задан, команда попытается импортировать «app» или «wsgi» (как файл “.py” или пакет) и попытается обнаружить экземпляр или фабрику приложения.
В рамках данного импорта команда ищет экземпляр приложения с именем app или application, а затем любой экземпляр приложения. Если экземпляр не найден, команда ищет функцию-фабрику с именем create_app или make_app, которая возвращает экземпляр.
Если за именем фабрики следуют скобки, их содержимое анализируется как Python-литералы и передаются в качестве аргументов и именованных аргументов в функцию. Это означает, что строки всё ещё должны быть в кавычках.
Запуск сервера разработки
Команда run запустит сервер разработки. В большинстве случаев она заменяет метод Flask.run().
$ flask --app hello run * Serving Flask app "hello" * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Предупреждение
Не используйте эту команду для запуска вашего приложения в производстве. Используйте сервер разработки только во время разработки. Сервер разработки предоставлен для удобства, но не предназначен для повышенной безопасности, стабильности или эффективности. Обратитесь к Развёртывание в производстве для получения инструкций по запуску в производстве.
Если другая программа уже использует порт 5000, вы увидите OSError: [Errno 98] или OSError: [WinError 10013] при попытке запуска сервера. Обратитесь к Адрес уже используется для обработки этой ситуации.
Режим отладки
В режиме отладки команда flask run по умолчанию включит интерактивный отладчик и перезагрузчик, а также упростит обнаружение и исправление ошибок. Чтобы включить режим отладки, используйте опцию --debug.
$ flask --app hello run --debug * Serving Flask app "hello" * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with inotify reloader * Debugger is active! * Debugger PIN: 223-456-919
Опция --debug также может быть передана в верхнеуровневую команду flask для включения режима отладки для любой команды. Следующие два вызова run эквивалентны.
$ flask --app hello --debug run $ flask --app hello run --debug
Отслеживание и игнорирование файлов с перезагрузчиком
При использовании режима отладки перезагрузчик будет активироваться всякий раз, когда изменяется ваш код Python или импортированные модули. Перезагрузчик может отслеживать дополнительные файлы с помощью опции --extra-files . Несколько путей разделяются с помощью :, или ; в Windows.
$ flask run --extra-files file1:dirA/file2:dirB/ * Running on http://127.0.0.1:8000/ * Detected change in '/path/to/file1', reloading
Перезагрузчик также может игнорировать файлы, используя шаблоны fnmatch с помощью опции --exclude-patterns . Несколько шаблонов разделяются с помощью :, или ; в Windows.
Открыть оболочку
Чтобы исследовать данные в вашем приложении, вы можете запустить интерактивную оболочку Python с помощью команды shell. Контекст приложения будет активным, и экземпляр приложения будет импортирован.
$ flask shell Python 3.10.0 (default, Oct 27 2021, 06:59:51) [GCC 11.1.0] on linux App: example [production] Instance: /home/david/Projects/pallets/flask/instance >>>
Используйте shell_context_processor() для добавления других автоматических импортов.
Переменные окружения из dotenv
Команда flask поддерживает настройку любого параметра для любой команды с помощью переменных окружения. Переменные называются, например, FLASK_OPTION или FLASK_COMMAND_OPTION, например, FLASK_APP или FLASK_RUN_PORT.
Вместо того, чтобы передавать параметры каждый раз при запуске команды или переменные окружения каждый раз при открытии нового терминала, можно использовать поддержку dotenv в Flask для автоматической установки переменных окружения.
Если установлен python-dotenv, выполнение команды flask установит переменные окружения, определенные в файлах .env и .flaskenv. Также можно указать дополнительный файл для загрузки с помощью параметра --env-file. Файлы dotenv можно использовать, чтобы не приходилось вручную устанавливать --app или FLASK_APP, и настраивать конфигурацию с помощью переменных окружения аналогично тому, как работают некоторые сервисы развертывания.
Переменные, заданные в командной строке, имеют приоритет над переменными, заданными в .env, которые имеют приоритет над переменными, заданными в .flaskenv. .flaskenv следует использовать для общедоступных переменных, таких как FLASK_APP, а .env не следует включать в репозиторий, чтобы можно было задавать приватные переменные.
Директории сканируются вверх от директории, из которой вы вызываете flask , для поиска файлов.
Файлы загружаются только командой flask или вызовом run(). Если вы хотите загрузить эти файлы при работе в производственной среде, необходимо вручную вызвать load_dotenv().
Настройка параметров команды
Click настроен на загрузку значений по умолчанию для параметров команд из переменных окружения. Переменные используют шаблон FLASK_COMMAND_OPTION. Например, для установки порта для команды run, вместо flask run --port 8000:
$ export FLASK_RUN_PORT=8000 $ flask run * Running on http://127.0.0.1:8000/
$ set -x FLASK_RUN_PORT 8000 $ flask run * Running on http://127.0.0.1:8000/
> set FLASK_RUN_PORT=8000 > flask run * Running on http://127.0.0.1:8000/
> $env:FLASK_RUN_PORT = 8000 > flask run * Running on http://127.0.0.1:8000/
Эти параметры можно добавить в файл .flaskenv так же, как FLASK_APP для управления параметрами команд по умолчанию.
Отключение dotenv
Команда flask отобразит сообщение, если обнаружит файлы dotenv, но python-dotenv не установлен.
$ flask run * Tip: There are .env files present. Do "pip install python-dotenv" to use them.
Можно запретить Flask загружать файлы dotenv, даже если python-dotenv установлен, задав переменную окружения FLASK_SKIP_DOTENV. Это может быть полезно, если вы хотите загружать их вручную или если используется запуск проекта, который загружает их уже. Имейте в виду, что переменные окружения должны быть установлены до загрузки приложения, иначе оно не настроится должным образом.
$ export FLASK_SKIP_DOTENV=1 $ flask run
$ set -x FLASK_SKIP_DOTENV 1 $ flask run
> set FLASK_SKIP_DOTENV=1 > flask run
> $env:FLASK_SKIP_DOTENV = 1 > flask run
Переменные окружения из virtualenv
Если вы не хотите устанавливать поддержку dotenv, вы можете задать переменные окружения, добавив их в конец скрипта virtualenv activate. Активация virtualenv установит эти переменные.
Unix Bash, .venv/bin/activate:
$ export FLASK_APP=hello
Fish, .venv/bin/activate.fish:
$ set -x FLASK_APP hello
Windows CMD, .venv\Scripts\activate.bat:
> set FLASK_APP=hello
Windows Powershell, .venv\Scripts\activate.ps1:
> $env:FLASK_APP = "hello"
Предпочтительнее использовать поддержку dotenv, так как .flaskenv можно включить в репозиторий, чтобы он работал автоматически при каждом извлечении проекта.
Пользовательские команды
Команда flask реализована с помощью Click. Обратитесь к документации этого проекта для получения полной информации о написании команд.
В этом примере добавлена команда create-user , принимающая аргумент name.
import click
from flask import Flask
app = Flask(__name__)
@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
...
$ flask create-user admin
В этом примере добавлена та же команда, но в качестве user create, команды в группе. Это полезно, если вы хотите организовать несколько связанных команд.
import click
from flask import Flask
from flask.cli import AppGroup
app = Flask(__name__)
user_cli = AppGroup('user')
@user_cli.command('create')
@click.argument('name')
def create_user(name):
...
app.cli.add_command(user_cli)
$ flask user create demo
См. Запуск команд с помощью CLI Runner для обзора способов тестирования пользовательских команд.
Регистрация команд с помощью Blueprint
Если ваше приложение использует Blueprint, вы можете необязательно зарегистрировать команды CLI непосредственно в них. Когда ваш Blueprint зарегистрирован в приложении, связанные команды будут доступны для команды flask. По умолчанию эти команды будут вложены в группу, соответствующую имени Blueprint.
from flask import Blueprint
bp = Blueprint('students', __name__)
@bp.cli.command('create')
@click.argument('name')
def create(name):
...
app.register_blueprint(bp)
$ flask students create alice
Вы можете изменить имя группы, указав параметр cli_group при создании объекта Blueprint или позже с помощью app.register_blueprint(bp, cli_group='...'). Следующие варианты эквивалентны:
bp = Blueprint('students', __name__, cli_group='other')
# or
app.register_blueprint(bp, cli_group='other')
$ flask other create alice
Указание cli_group=None удалит вложенность и объединит команды непосредственно на уровне приложения:
bp = Blueprint('students', __name__, cli_group=None)
# or
app.register_blueprint(bp, cli_group=None)
$ flask create alice
Контекст приложения
Команды, добавленные с помощью cli или FlaskGroup декоратора command(), будут выполняться с загруженным контекстом приложения, поэтому ваши пользовательские команды и параметры получат доступ к приложению и его конфигурации. Декоратор with_appcontext() может обеспечить аналогичное поведение, но в большинстве случаев он не нужен.
import click
from flask.cli import with_appcontext
@click.command()
@with_appcontext
def do_work():
...
app.cli.add_command(do_work)
Плагины
Flask автоматически загрузит команды, указанные в flask.commands точке входа. Это полезно для расширений, которые хотят добавить команды при установке. Точки входа указываются в pyproject.toml:
[project.entry-points."flask.commands"] my-command = "my_extension.commands:cli"
Внутри my_extension/commands.py вы можете экспортировать объект Click:
import click
@click.command()
def cli():
...
После установки этого пакета в той же виртуальной среде, что и ваш проект Flask, вы можете запустить flask my-command для вызова команды.
Пользовательские скрипты
При использовании шаблона фабрики приложений, может быть удобнее определить собственный скрипт Click. Вместо использования --app и предоставления Flask вашего приложения, вы можете создать собственный объект Click и экспортировать его как точку входа скрипта консоли.
Создайте экземпляр FlaskGroup и передайте ему фабрику:
import click
from flask import Flask
from flask.cli import FlaskGroup
def create_app():
app = Flask('wiki')
# other setup
return app
@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
"""Management script for the Wiki application."""
Определите точку входа в pyproject.toml:
[project.scripts] wiki = "wiki:cli"
Установите приложение в виртуальной среде в режиме редактирования, и пользовательский скрипт будет доступен. Обратите внимание, что вам не нужно устанавливать --app.
$ pip install -e . $ wiki run
Ошибки в пользовательских скриптах
При использовании пользовательского скрипта, если вы допустите ошибку в коде на уровне модуля, перезагрузчик завершится ошибкой, поскольку он больше не сможет загрузить точку входа.
Команда flask, будучи отделённой от вашего кода, не имеет этой проблемы и рекомендуется в большинстве случаев.
Интеграция с PyCharm
PyCharm Professional предоставляет специальную конфигурацию запуска Flask для запуска сервера разработки. Для Community Edition и для других команд, помимо run, вам необходимо создать пользовательскую конфигурацию запуска. Эти инструкции должны быть похожи для других IDE, которые вы используете.
В PyCharm, с открытым проектом, нажмите на Запуск в строке меню и перейдите к Редактировать конфигурации. Вы увидите экран, похожий на этот:
После создания конфигурации для flask run, вы можете скопировать и изменить её, чтобы вызвать любую другую команду.
Нажмите кнопку + (Добавить новую конфигурацию) и выберите Python. Дайте конфигурации имя, например, «flask run».
Нажмите раскрывающийся список Путь к скрипту и измените его на Имя модуля, затем введите flask.
Поле Параметры задано на команду CLI для выполнения вместе со всеми аргументами. Этот пример использует --app hello run --debug, что запустит сервер разработки в режиме отладки. --app hello должен быть импортом или файлом с вашим приложением Flask.
Если вы установили свой проект как пакет в своей виртуальной среде, вы можете снять флажок с опций PYTHONPATH. Это более точно соответствует тому, как вы развернёте приложение позже.
Нажмите OK, чтобы сохранить и закрыть конфигурацию. Выберите конфигурацию в основном окне PyCharm и нажмите кнопку воспроизведения рядом с ней, чтобы запустить сервер.
Теперь, когда у вас есть конфигурация для flask run, вы можете скопировать эту конфигурацию и изменить аргумент Параметры, чтобы запустить другую команду CLI.
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/cli/