Spec-Zone.ru › Flask 2.1

Сервер разработки

Flask предоставляет команду run для запуска приложения с сервером разработки. В режиме разработки этот сервер предоставляет интерактивный отладчик и будет перезагружаться при изменении кода.

Предупреждение

Не используйте сервер разработки при развертывании в продакшене. Он предназначен только для использования во время разработки на локальной машине. Он не предназначен для высокой эффективности, стабильности или безопасности.

См. Варианты развертывания для вариантов развертывания.

Командная строка

Рекомендуемый способ запуска сервера разработки — с помощью скрипта командной строки flask run. Он требует установки переменной окружения FLASK_APP для указания вашего приложения и FLASK_ENV=development для полного включения режима разработки.

$ export FLASK_APP=hello
$ export FLASK_ENV=development
$ flask run
$ set -x FLASK_APP hello
$ export FLASK_ENV=development
$ flask run
> set FLASK_APP=hello
> set FLASK_ENV=development
> flask run
> $env:FLASK_APP = "hello"
> $env:FLASK_ENV = "development"
> flask run

Это включает среду разработки, включая интерактивный отладчик и перезагрузчик, а затем запускает сервер по адресу http://localhost:5000/. Используйте flask run --help для просмотра доступных опций и Интерфейс командной строки для получения подробных инструкций по настройке и использованию командной строки.

Примечание

До Flask 1.0 переменная окружения FLASK_ENV не поддерживалась, и вам нужно было включить режим отладки, экспортировав FLASK_DEBUG=1. Это всё ещё можно использовать для управления режимом отладки, но рекомендуется использовать установку среды разработки, как показано выше.

Адрес уже используется

Если другая программа уже использует порт 5000, при запуске сервера вы увидите OSError. Сообщение может быть следующим:

  • OSError: [Errno 98] Address already in use
  • OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

Найдите и остановите другую программу или используйте flask run --port 5001 для выбора другого порта.

Вы можете использовать netstat или lsof для определения идентификатора процесса, использующего порт, а затем использовать другие инструменты операционной системы для остановки этого процесса. Следующий пример показывает, что процесс с идентификатором 6847 использует порт 5000.

$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
$ lsof -P -i :5000
Python 6847 IPv4 TCP localhost:5000 (LISTEN)
> netstat -ano | findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847

macOS Monterey и более поздние версии автоматически запускают службу, использующую порт 5000. Чтобы отключить службу, перейдите в Настройки системы, Общие и отключите «Приемник AirPlay».

Леничная или немедленная загрузка

При использовании команды flask run с перезагрузкой сервер будет продолжать работать, даже если вы введете синтаксические ошибки или другие ошибки инициализации в код. При доступе к сайту будет показан интерактивный отладчик для ошибки, а не сбой сервера. Эта функция называется «леничной загрузкой».

Если синтаксическая ошибка уже существует при вызове flask run, она немедленно завершится и отобразит обратный след, а не будет ждать, пока страница не будет обработана. Это сделано для того, чтобы ошибки были более заметны изначально, позволяя серверу обрабатывать ошибки при перезагрузке.

Чтобы переопределить это поведение и всегда завершаться немедленно, даже при перезагрузке, передайте параметр --eager-loading. Чтобы всегда держать сервер работающим, даже при первоначальном вызове, передайте --lazy-loading.

В коде

В качестве альтернативы команде flask run сервер разработки также можно запустить из Python с помощью метода Flask.run(). Этот метод принимает аргументы, аналогичные параметрам командной строки для управления сервером. Основное различие с командой командной строки заключается в том, что сервер завершится с ошибкой, если при перезагрузке произойдут ошибки.

debug=True можно передать для включения отладчика и перезагрузчика, но переменная окружения FLASK_ENV=development всё ещё требуется для полного включения режима разработки.

Разместите вызов в блоке main, иначе он будет мешать при попытке импортировать и запустить приложение с сервером продакшена позднее.

if __name__ == "__main__":
    app.run(debug=True)
$ python hello.py

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.1.x/server/

Spec-Zone.ru

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