Spec-Zone.ru › Flask 3.0

Интерфейс командной строки

Установка 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, с открытым проектом, нажмите на Запуск в строке меню и перейдите к Редактировать конфигурации. Вы увидите экран, похожий на этот:

Screenshot of PyCharm run configuration.

После создания конфигурации для 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/3.0.x/cli/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API