- Возможности Flask
- Создание минимального Flask-приложения
- Запуск с помощью development-сервера
- Режим отладки
- Вывод
Цикл запрос-обработка-ответ включает множество элементов, которые идентичны для всех сайтов. Поэтому возникли фреймворки — специализированные библиотеки, которые определяют структуру программы. Этим они отличаются от обычных библиотек. Благодаря фреймворкам можно сосредоточиться на логике сайта, а не продумывать базовую архитектуру или кодирование вспомогательных инструментов.
Веб-фреймворки подразделяются на две большие группы: фреймворки и микрофреймворки. Микрофреймворки устроены проще и содержат только минимально необходимую обвязку, чтобы комфортно работать в архитектуре 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 со следующим содержимым:
from flask import Flask
# Это callable WSGI-приложение
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Welcome to Flask!"
Разберем код выше подробнее:
Импортируем класс-инициализатор Flask. Его экземпляр и будет нашим WSGI-приложением:
from flask import Flask
Инстанцируем экземпляр, где класс принимает первым аргументом имя модуля нашего приложения
__name__
. Это нужно, чтобы Flask знал, где искать шаблоны и статические файлы:app = Flask(__name__)
Используем декоратор
route()
, который связывает функцию-обработчик с конкретным адресом нашего сайта. Об обработчиках и роутинге поговорим в следующих уроках:@app.route('/') def hello_world(): ...
Функция-обработчик возвращает ответ, который выведется в браузере:
def hello_world(): return 'Welcome to Flask!'
Запуск с помощью development-сервера
В разработке удобнее использовать специальный сервер, который поставляется вместе с Flask. Он не подходит для серьезного использования, но у него есть полезные качества для разработки. Он позволяет просматривать логи запросов и удобно отображает ошибки, которые возникают во время исполнения.
Запустим приложение встроенным сервером. Введем в терминале следующие команды:
# Если вы используете uv, то не забудьте добавить uv run
flask --app example run --port 8000
Здесь команда задает модуль, в котором объявлен объект WSGI-приложения и запускает сервер разработчика — developing server. Создадим файл Makefile в корне проекта и добавим туда задачу start
:
start:
flask --app example run --port 8000
Выполним запуск:
make start
Вывод будет таким:
* Serving Flask app 'example.py'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:8000
Press CTRL+C to quit
Flask предупреждает, что в данный момент запущен сервер разработчика, а в реальных условиях понадобится «промышленный» WSGI-сервер — production WSGI server.
Пока мы не остановим сервер нажатием Ctrl+C
, в браузере по адресу http://127.0.0.1:8000/
можно будет увидеть текст «Welcome to Flask!».
Режим отладки
Если в приложении случится ошибка, то мы увидим заготовленное сообщение с подобным текстом: "Internal Server Error"
. Но во время разработки хочется видеть вывод ошибки, и чтобы была возможность не перезапускать руками сервер при каждом изменении кода. И development-сервер это умеет, нужно только включить режим отладки:
flask --app example --debug run --port 8000
Изменим тогда и команду в Makefile:
start:
flask --app example --debug run --port 8000
Когда мы перезапустим сервер, то вывод будет немного отличаться:
* Serving Flask app 'example.py'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:8000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: xxx-xxx-xxx
Теперь включен режим отладки — «Debugger is active!». С включенным отладчиком сообщения об ошибках будут отображаться прямо в браузере в удобном для просмотра виде. Про встроенный во Flask отладчик Werkzeug расскажем подробнее позднее.
Также теперь все изменения в коде будут автоматически перезапускать сервер. Например, попробуйте изменить выводимый текст на ‘Hello, Hexlet!’. Как только вы сохраните код, сервер перезагрузится, и вы увидите в браузере новое сообщение.
Вывод
В этом уроке мы познакомились с одним из наиболее популярных python-микрофреймворков — Flask, а также узнали его возможности. Еще мы научились создавать минимальное Flask-приложение и запускать его с помощью development-сервера. Также мы знаем, как включить режим отладки, чтобы сообщения об ошибках отображались прямо в браузере в удобном для просмотра виде.
Самостоятельная работа
- Создайте новый проект и установите в его окружение пакет
flask
- Создайте модуль
example.py
с содержимым из примера в начале урока - Создайте Makefile с командой
make start
. Измените ее, чтобы она запускала Flask с помощью uv - Запустите сервер
- Откройте в браузере адрес, который вам покажет сервер в момент запуска
- Убедитесь, что текст отображается, а изменения строки в исходном файле отражаются на выводимом тексте без ручного перезапуска сервера
- Попробуйте вместо строки вернуть число. В ответ на это браузер должен отобразить ошибку
TypeError
, и она же должна быть видна в терминале, в котором запущен сервер
Эталонное приложение
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.