Цикл запрос-обработка-ответ включает множество элементов, которые идентичны для всех сайтов. Поэтому возникли фреймворки — специализированные библиотеки, которые определяют структуру программы. Этим они отличаются от обычных библиотек. Благодаря фреймворкам можно сосредоточиться на логике сайта, а не продумывать базовую архитектуру или кодирование вспомогательных инструментов.
Веб-фреймворки подразделяются на две большие группы: фреймворки и микрофреймворки. Микрофреймворки устроены проще и содержат только минимально необходимую обвязку, чтобы комфортно работать в архитектуре HTTP — запрос-ответ. Они идеально подходят для обучения, потому что просты в эксплуатации и не отвлекают от главного.
Один из наиболее популярных python-микрофреймворков — Flask. В этом уроке познакомимся с ним и узнаем его возможности. Также научимся создавать минимальное Flask-приложение и запускать его с помощью development-сервера. В конце расскажем, как включить режим отладки, чтобы сообщения об ошибках отображались прямо в браузере в удобном для просмотра виде.
Микрофреймворк Flask умеет:
При этом с помощью Flask нельзя:
Чтобы добавить эти и другие возможности в приложение, нужно подключить внешние библиотеки. Ознакомиться с полным перечнем библиотек и их возможностями можно на странице pypi.org.
Чтобы создать минимальное Flask-приложение, нужно выполнить следующие шаги:
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!'
В разработке удобнее использовать специальный сервер, который поставляется вместе с Flask. Он не подходит для серьезного использования, но у него есть полезные качества для разработки. Он позволяет просматривать логи запросов и удобно отображает ошибки, которые возникают во время исполнения.
Запустим приложение встроенным сервером. Введем в терминале следующие команды:
# Если вы используете poetry, то не забудьте добавить poetry run
flask --app example run
Здесь первая команда задает модуль, в котором объявлен объект WSGI-приложения. Вторая запускает сервер разработчика — developing server. Создадим файл Makefile в корне проекта и добавим туда задачу start
:
start:
flask --app example run
Выполним запуск:
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:5000
Press CTRL+C to quit
Flask предупреждает, что в данный момент запущен сервер разработчика, а в реальных условиях понадобится «промышленный» WSGI-сервер — production WSGI server.
Пока мы не остановим сервер нажатием Ctrl+C
, в браузере по адресу http://127.0.0.1:5000/
можно будет увидеть текст «Welcome to Flask!»:
Если в приложении случится ошибка, то мы увидим заготовленное сообщение с подобным текстом: "Internal Server Error"
. Но во время разработки хочется видеть вывод ошибки, и чтобы была возможность не перезапускать руками сервер при каждом изменении кода. И development-сервер это умеет, нужно только включить режим отладки:
flask --app example --debug run
Изменим тогда и команду в Makefile:
start:
flask --app example --debug run
Когда мы перезапустим сервер, то вывод будет немного отличаться:
* 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:5000
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
с содержимым из примера в начале урокаmake start
. Измените ее, чтобы она запускала Flask с помощью poetryTypeError
, и она же должна быть видна в терминале, в котором запущен серверВам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт