Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Быстрый старт с Flask Python: Веб-разработка (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
    • запустит сервер разработчика (про Makefile можно узнать из нашего видео)
  4. Запустите сервер
  5. Откройте в браузере адрес, который вам покажет сервер в момент запуска
  6. Убедитесь, что текст отображается и изменения строки в исходном файле отражаются на выводимом тексте без ручного перезапуска сервера
  7. Попробуйте вместо строки вернуть число. В ответ на это браузер должен отобразить ошибку TypeError (и она же должна быть видна в терминале, в котором запущен сервер)

Дополнительные материалы

  1. Что такое Makefile и как начать его использовать

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»