Python: Веб-разработка (Flask)
Теория: Flask
Цикл запрос-обработка-ответ включает множество элементов, которые идентичны для всех сайтов. Поэтому возникли фреймворки — специализированные библиотеки, которые определяют структуру программы. Этим они отличаются от обычных библиотек. Благодаря фреймворкам можно сосредоточиться на логике сайта, а не продумывать базовую архитектуру или кодирование вспомогательных инструментов.
Веб-фреймворки подразделяются на две большие группы: фреймворки и микрофреймворки. Микрофреймворки устроены проще и содержат только минимально необходимую обвязку, чтобы комфортно работать в архитектуре HTTP — запрос-ответ. Они идеально подходят для обучения, потому что просты в эксплуатации и не отвлекают от главного.
Один из наиболее популярных python-микрофреймворков — Flask. В этом уроке познакомимся с ним и узнаем его возможности. Также научимся создавать минимальное Flask-приложение и запускать его с помощью development-сервера. В конце расскажем, как включить режим отладки, чтобы сообщения об ошибках отображались прямо в браузере в удобном для просмотра виде.
Возможности Flask
Микрофреймворк Flask умеет:
- Разбирать запросы и производить маршрутизацию по адресу, глаголу HTTP, параметрам запроса
- Формировать ответы на запросы, которые содержат нужные статус, заголовки, cookies, данные в необходимом формате, например: текст, JSON
- Работать с сессиями
- Удобно вызывать шаблонизатор для формирования ответа
При этом с помощью Flask нельзя:
- Работать с данными в базе данных — не содержит встроенной ORM
- Формировать интерфейс администратора — administrator interface, админка
- Обрабатывать формы ввода данных и валидацию этих данных
Чтобы добавить эти и другие возможности в приложение, нужно подключить внешние библиотеки. Ознакомиться с полным перечнем библиотек и их возможностями можно на странице pypi.org.
Создание минимального Flask-приложения
Чтобы создать минимальное Flask-приложение, нужно выполнить следующие шаги:
- Создать новый python-проект в директории hexlet-flask-example и добавить в зависимости Flask
- Создать в корне директории модуль example.py со следующим содержимым:
Разберем код выше подробнее:
-
Импортируем класс-инициализатор Flask. Его экземпляр и будет нашим WSGI-приложением:
-
Инстанцируем экземпляр, где класс принимает первым аргументом имя модуля нашего приложения
__name__. Это нужно, чтобы Flask знал, где искать шаблоны и статические файлы: -
Используем декоратор
route(), который связывает функцию-обработчик с конкретным адресом нашего сайта. Об обработчиках и роутинге поговорим в следующих уроках: -
Функция-обработчик возвращает ответ, который выведется в браузере:
Запуск с помощью development-сервера
В разработке удобнее использовать специальный сервер, который поставляется вместе с Flask. Он не подходит для серьезного использования, но у него есть полезные качества для разработки. Он позволяет просматривать логи запросов и удобно отображает ошибки, которые возникают во время исполнения.
Запустим приложение встроенным сервером. Введем в терминале следующие команды:
Здесь команда задает модуль, в котором объявлен объект WSGI-приложения и запускает сервер разработчика — developing server. Создадим файл Makefile в корне проекта и добавим туда задачу start:
Выполним запуск:
Вывод будет таким:
Flask предупреждает, что в данный момент запущен сервер разработчика, а в реальных условиях понадобится «промышленный» WSGI-сервер — production WSGI server.
Пока мы не остановим сервер нажатием Ctrl+C, в браузере по адресу http://127.0.0.1:8000/ можно будет увидеть текст «Welcome to Flask!».
Режим отладки
Если в приложении случится ошибка, то мы увидим заготовленное сообщение с подобным текстом: "Internal Server Error". Но во время разработки хочется видеть вывод ошибки, и чтобы была возможность не перезапускать руками сервер при каждом изменении кода. И development-сервер это умеет, нужно только включить режим отладки:
Изменим тогда и команду в Makefile:
Когда мы перезапустим сервер, то вывод будет немного отличаться:
Теперь включен режим отладки — «Debugger is active!». С включенным отладчиком сообщения об ошибках будут отображаться прямо в браузере в удобном для просмотра виде. Про встроенный во Flask отладчик Werkzeug расскажем подробнее позднее.
Также теперь все изменения в коде будут автоматически перезапускать сервер. Например, попробуйте изменить выводимый текст на ‘Hello, Hexlet!’. Как только вы сохраните код, сервер перезагрузится, и вы увидите в браузере новое сообщение.
Вывод
В этом уроке мы познакомились с одним из наиболее популярных python-микрофреймворков — Flask, а также узнали его возможности. Еще мы научились создавать минимальное Flask-приложение и запускать его с помощью development-сервера. Также мы знаем, как включить режим отладки, чтобы сообщения об ошибках отображались прямо в браузере в удобном для просмотра виде.

