Интерфейс шлюза веб-сервера (WSGI, произносится как виски или ) - это простое соглашение о вызовах для веб-серверов для пересылки запросов в веб-приложения или фреймворки, написанные на языке программирования Python. Текущая версия WSGI, версия 1.0.1, указана в Python Enhancement Proposal (PEP) 3333.
WSGI изначально был указан как PEP-333 в 2003 году. PEP-3333, опубликовано в 2010 обновлена спецификация для Python 3.
В 2003 году веб-фреймворки Python обычно писались только для CGI, FastCGI, mod_python или какой-либо другой настраиваемый API определенного веб-сервера. Процитируем PEP 333:
Python в настоящее время может похвастаться широким спектром фреймворков веб-приложений, таких как Zope, Quixote, Webware, SkunkWeb, PSO и Twisted Web - и это лишь некоторые из них. Этот широкий выбор может быть проблемой для новых пользователей Python, потому что, вообще говоря, их выбор веб-фреймворка ограничивает их выбор используемых веб-серверов, и наоборот... В отличие от этого, хотя Java имеет столько же фреймворков веб-приложений доступный, API сервлетов Java позволяет приложениям, написанным на любой структуре веб-приложений Java, работать на любом веб-сервере, поддерживающем API сервлетов.
Таким образом, WSGI был создан как не зависящий от реализации интерфейс между веб-серверами и веб-приложениями или фреймворками для продвижения общей основы для портативных разработки веб-приложений.
WSGI имеет две стороны:
Между сервером и приложением может быть один или несколько компонентов промежуточного программного обеспечения WSGI , которые реализуют обе стороны API, обычно в Код Python.
WSGI не указывает, как следует запускать интерпретатор Python, а также как объект приложения должен быть загружен или настроен, и разные платформы и веб-серверы достигают этого по-разному.
Компонент промежуточного ПО WSGI - это вызываемый Python, который сам является приложением WSGI, но может обрабатывать запросы, делегируя другим приложениям WSGI. Эти приложения могут сами быть компонентами промежуточного программного обеспечения WSGI.
Компонент промежуточного программного обеспечения может выполнять такие функции, как:
WSGI-совместимый " Hello, World "приложение, написанное на Python :
1 def application (environment, start_response): 2 start_response ('200 OK', [('Content-Type', 'text / plain')]) 3 yield b'Hello, World \ n '
Где:
application
, которая принимает два параметра: Environment
и start_response
. Environment
- это словарь, содержащий переменные среды CGI, а также другие параметры запроса и метаданные с четко определенными ключами. start_response
- это сам вызываемый объект, принимающий два позиционных параметра, status
и response_headers
.start_response
, указывая «200 OK» в качестве статуса HTTP и заголовка ответа «Content-Type».Полный пример сетевого сервера WSGI выходит за рамки этой статьи. Ниже приведен эскиз того, как можно вызвать приложение WSGI и получить его строку состояния HTTP, заголовки ответа и тело ответа в виде объектов Python. Подробности создания словаря environment
были опущены.
из io import BytesIO def call_application (app, environment): status = None headers = None body = BytesIO () def start_response (rstatus, rheaders): нелокальный статус, статус заголовков, headers = rstatus, rheaders app_iter = app (environment, start_response) try: для данных в app_iter: статус assert не равен None, а заголовки не None, \ "start_response () не был вызван" body.write (data) наконец: if hasattr (app_iter, 'close'): app_iter. close () возвращают статус, заголовки, body.getvalue () environment = {...} # "environment" dict status, headers, body = call_application (app, environment)
Многочисленные веб-фреймворки поддерживают WSGI:
В настоящее время оболочки доступны для FastCGI, CGI, SCGI, AJP (с использованием flup), twisted.web, Apache (с использованием mod_wsgi или mod_python ), Nginx (с использованием ngx_http_uwsgi_module), и Microsoft IIS (с использованием WFastCGI, isapi-wsgi, PyISAPIe или шлюза ASP ).