В этом уроке вы узнаете, из каких компонентов состоит бэкенд на Python — мы познакомимся с ключевыми терминами курса.
Веб-сервер
Большинство веб-приложений построено на клиент-серверной модели:
- Клиент: Пользователь открывает браузер и отправляет запрос
- Сервер: Запрос от браузера поступает на веб-сервер, который начинает обрабатывать его
Некоторые языки встраивают веб-сервер прямо в свое приложение, но большинство интерпретируемых языков использует специальную внешнюю программу.
Таких самостоятельных веб-серверов существует несколько, но наиболее популярен Nginx. Он обрабатывает входящие запросы, отдает статические файлы и распределяет запросы между веб-приложениями.
WSGI
Если бэкенд веб-приложения написан на Python, за веб-сервером обычно находится WSGI-сервер, который запускает WSGI-приложения. Рассмотрим подробнее, что это такое.
WSGI (Web Server Gateway Interface) — это такая абстракция, согласно которой происходит ответ на запросы. По сути это Python-функция, принимающая запрос и возвращающая ответ.
Самое простое WSGI-приложение выглядит примерно так:
# Код ниже может казаться непонятным, но это не так важно
# Главное — мы видим, что это всего лишь одна функция
def app(environ, start_response):
data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
Рассмотрим этот фрагмент кода подробнее:
- Сначала все, что касается конкретного запроса, приходит в аргументе
environ
- Затем функция
start_response
устанавливает параметры ответа — здесь это размер ответа и тип содержимого - Далее функция просто возвращает итератор, построчно отдающий ответ
Самое простое рабочее веб-приложение можно получить довольно просто:
- Берем популярный WSGI-сервер gunicorn
- Сохраняем функцию в файл
example.py
- Вызываем команду
gunicorn -w 4 example:app
- Переходим по ссылке в выводе gunicorn и видим ответ сервера
Веб-фреймворк
Выше мы увидели довольно простое веб-приложение. Пусть оно и работает, но на любой запрос оно будет возвращать один и тот же текст. Что-то более сложное написать в таком стиле будет проблематично, пусть и выполнимо.
Чтобы упростить жизнь бэкенд-разработчика и помочь ему реализовывать типичные приложения, используются фреймворки — библиотеки, задающие готовую структуру приложения.
В эту структуру разработчику нужно только вписывать свои фрагменты кода, при этом сам скелет приложения уже готов к применению. Самые популярные веб-фреймворки для Python — это Django и Flask.
Веб-фреймворки берут на себя много разных задач:
- Выполняют маршрутизацию
- Упрощают работу с заголовками и данными запросов
- Формируют ответы в разных форматах
- Сохраняют истории запросов в файлы для статистики и отладки
ORM и шаблонизатор
Что же еще находится в бэкенде, кроме обработки запросов? Чаще всего там есть ORM и шаблонизатор.
ORM (Object-Relational Mapping) — это средство работы с записями в базах данных, предоставляющие записи в виде понятных для языка программирования объектов.
Шаблонизатор — это средство, позволяющее писать HTML и CSS в отдельных файлах, а затем модифицировать их содержимое из кода так, чтобы верстка отображала нужные данные. Шаблонизатор дает возможность сверстать макет один раз, а потом программно получать из макета разные страницы.
Django и некоторые другие веб-фреймворки уже включают в себя ORM и шаблонизатор.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.