Сервер разработки¶
Flask предоставляет команду run
для запуска приложения с сервером разработки. В режиме отладки этот сервер предоставляет интерактивный отладчик и будет перезагружаться при изменении кода.
Предупреждение
Не используйте сервер разработки при развертывании на производстве. Он предназначен только для локальной разработки. Он не предназначен для обеспечения особой эффективности, стабильности или безопасности.
Варианты развертывания см. в разделе Развертывание в производство.
Командная строка¶
Команда flask run
CLI является рекомендуемым способом запуска сервера разработки. Используйте опцию --app
для указания на ваше приложение, а опцию --debug
для включения режима отладки.
$ flask --app hello run --debug
Это включает режим отладки, включая интерактивный отладчик и перезагрузчик, а затем запускает сервер на http://localhost:5000/. Используйте flask run --help
для просмотра доступных опций и Интерфейс командной строки для получения подробных инструкций по настройке и использованию CLI.
Адрес уже используется¶
Если другая программа уже использует порт 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
(Linux)
$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
lsof
(macOS / Linux)
$ lsof -P -i :5000
Python 6847 IPv4 TCP localhost:5000 (LISTEN)
netstat
(Windows)
> netstat -ano | findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847
macOS Monterey и более поздние версии автоматически запускают службу, использующую порт 5000. Чтобы отключить службу, перейдите в «Системные настройки», «Общий доступ» и отключите «AirPlay Receiver».
Отложенные ошибки при перезагрузке¶
При использовании команды flask run
с перезагрузчиком сервер будет продолжать работать, даже если вы внесете в код синтаксические ошибки или другие ошибки инициализации. Доступ к сайту покажет интерактивный отладчик ошибки, а не обрушит сервер.
Если при вызове flask run
уже присутствует синтаксическая ошибка, он будет немедленно завершен и покажет обратную трассировку, а не будет ждать, пока к сайту обратятся. Это сделано для того, чтобы сделать ошибки более заметными на начальном этапе, но при этом позволить серверу обрабатывать ошибки при перезагрузке.
В коде¶
Сервер разработки также можно запустить из Python с помощью метода Flask.run()
. Этот метод принимает аргументы, аналогичные опциям CLI для управления сервером. Основное отличие от команды CLI заключается в том, что сервер аварийно завершит работу, если при перезагрузке возникнут ошибки. debug=True
может быть передан для включения режима отладки.
Поместите вызов в главный блок, иначе он будет мешать при попытке импортировать и запустить приложение на рабочем сервере позже.
if __name__ == "__main__":
app.run(debug=True)
$ python hello.py