Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

Быстрый старт с Flask.

Минимальное Web-приложение.

Во вводном курсе по web-разработке я уже приводил этот пример:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

Этот код уже является настоящим Web-приложением. Но вы можете заметить отсутствие точки входа. Всё верно, Web-приложения в Python-мире не запускаются как обычные программы: за это отвечает WSGI-сервер.

В "боевых условиях" в этом качестве будет, как правило, выступать gunicorn и позднее мы рассмотрим, как осуществлять такой запуск. Пока же удобнее использовать специальный сервер, поставляющийся вместе с библиотекой Flask. Этот встроенный во flask сервер не годится для серьёзного использования, но зато обладает удобными именно в процессе разработки качествами. Он позволяет просматривать логи запросов и удобно отображает ошибки, возникающие во время исполнения.

Запуск силами сервера разработчика.

Итак, запускаем приложение встроенным сервером. Для начала сохраним упомянутый выше код в файл hello_world.py. Затем произведём в терминале следующие действия:

$ export FLASK_APP=hello_world.py
$ python -m flask run

Первая команда задаёт модуль, в котором объявлен объект WSGI-приложения. Вторая запускает сервер разработчика (developing server).

Подразумевается, что в текущем окружении установлен пакет flask (pip install flask). Лучше всего, конечно же, устанавливать Flask в виртуальное окружение, пусть даже наш проект пока и состоит из одного модуля.

Если flask установлен нормально и в модуле ошибок нет, то после ввода второй команды вы должны увидеть примерно такой текст:

 * Serving Flask app "hello_world.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Обратите внимание, Flask сам предупреждает, что в данный момент запущен сервер разработчика, а в реальных условиях вам понадобится "промышленный" WSGI-сервер ("production WSGI server").

До тех пор, пока вы не остановите сервер нажатием Ctrl+C, по адресу http://127.0.0.1:5000/ вы сможете видеть тот самый текст "Hello, World!".

Включение режима разработки.

Пока сервер разработчика только запускает приложение. А если в приложении случится ошибка, то вы увидите всего лишь заготовленное сообщение с текстом вроде "что-то пошло не так". Но во время разработки хочется и ошибки видеть в удобоваримом виде и, что немаловажно, иметь возможность не перезапускать руками сервер при каждом изменении кода! И dev server Flask это умеет: нужно всего лишь включить соответствующий режим:

$ export FLASK_ENV=development

Теперь выводимый при запуске (нужно будет заново запустить сервер) текст будет немного отличаться:

 * Serving Flask app "hello_world.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx

Теперь предупреждение не выводится, окружение Environment называется "development", вместо "production", а также включен режим отладки ("Debugger is active!"). Про встроенный во Flask отладчик Werkzeug (читается "Веркцойг") я расскажу более подробно позднее. Пока же достаточно будет отметить, что с включенным отладчиком сообщения об ошибках будут отображаться прямо в браузере в удобном для просмотра виде!

Задание.

  1. Создайте виртуальное окружение и установите в него пакет flask.
  2. Создайте модуль hello_world.py с содержимом из примера в начале урока.
  3. Разместите рядом Makefile с командой, которая
    • настроит FLASK_APP и FLASK_ENV,
    • запустит сервер разработчика.
  4. Запустите сервер.
  5. Откройте в браузере адрес, который вам покажет сервер в момент запуска.
  6. Убедитесь, что текст отображается и изменения строки в исходном файле отражаются на выводимом тексте без ручного перезапуска сервера.
  7. Попробуйте вместо строки вернуть число. В ответ на это браузер должен отобразить ошибку TypeError (и она же должна быть видна в терминале, в котором запущен сервер).
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →