Что такое WSGI и каково его назначение?

Ответ

WSGI (Web Server Gateway Interface) — это стандартный интерфейс в Python, который определяет, как веб-сервер взаимодействует с веб-приложением или фреймворком.

Основное назначение — отделить веб-сервер (например, Gunicorn, Nginx+uWSGI) от веб-приложения (например, Django, Flask). Это позволяет разработчикам выбирать любой WSGI-совместимый сервер для запуска своего приложения без изменения кода.

Схема взаимодействия: Клиент <-> Веб-сервер (Nginx) <-> WSGI-сервер (Gunicorn) <-> Python-приложение (Django)

Как это работает:

WSGI-приложение — это вызываемый объект (callable), который принимает два аргумента:

  1. environ: Словарь, содержащий переменные окружения и данные HTTP-запроса (заголовки, метод и т.д.).
  2. start_response: Функция, которую приложение должно вызвать для отправки HTTP-статуса и заголовков ответа.

Приложение должно вернуть итерируемый объект с телом ответа.

Простейший пример WSGI-приложения:

# Это приложение может быть запущено любым WSGI-сервером, например, Gunicorn
def application(environ, start_response):
    # Устанавливаем статус и заголовки ответа
    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]
    start_response(status, headers)

    # Возвращаем тело ответа в виде списка байтовых строк
    return [b'Hello, WSGI!']

Благодаря WSGI, такие фреймворки, как Django и Flask, могут работать с различными серверами, не заботясь о низкоуровневых деталях обработки HTTP.