Ответ
WSGI (Web Server Gateway Interface) — это стандартный интерфейс в Python, который определяет, как веб-сервер взаимодействует с веб-приложением или фреймворком.
Основное назначение — отделить веб-сервер (например, Gunicorn, Nginx+uWSGI) от веб-приложения (например, Django, Flask). Это позволяет разработчикам выбирать любой WSGI-совместимый сервер для запуска своего приложения без изменения кода.
Схема взаимодействия:
Клиент <-> Веб-сервер (Nginx) <-> WSGI-сервер (Gunicorn) <-> Python-приложение (Django)
Как это работает:
WSGI-приложение — это вызываемый объект (callable), который принимает два аргумента:
environ
: Словарь, содержащий переменные окружения и данные HTTP-запроса (заголовки, метод и т.д.).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.