Для чего предназначены библиотеки WSGI (не фреймворки, не серверы)? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь хорошо понять разделение интересов в веб-разработке, особенно в WSGI .

Это сомнение пришло ко мне, читая о Flask, а затем о Werkzeug, поэтомуЯ сосредоточу свой вопрос, используя их в качестве примера.

Сначала приведу пример кода с веб-страницы Werkzeug :

from werkzeug.wrappers import Request, Response

@Request.application
def application(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, application)

Там есть return Response().Это похоже на веб-приложение.Но Werkzeug представлен не как веб-фреймворк, а как «библиотека утилит WSGI».Похоже, он указан как Middleware в WSGI в разделе Прочитать документы .

Затем я обнаружил это в PEP 3333 - Интерфейс шлюза веб-сервера Python v1.0.1 :

Обратите внимание, что отдельный объект может играть роль сервера по отношению к некоторым приложениям, а также выполнять роль приложения по отношению к некоторым серверам.Такие «промежуточные» компоненты могут выполнять такие функции, как:

  • Маршрутизация запроса к различным объектам приложения на основе целевого URL-адреса после соответствующей перезаписи среды.
  • Разрешение нескольких приложений или структурдля параллельного запуска в одном и том же процессе
  • Балансировка нагрузки и удаленная обработка путем пересылки запросов и ответов по сети
  • Выполнение постобработки содержимого, например применение таблиц стилей XSL

Итак, вот мои вопросы:
1. Являются ли промежуточные программы, такие как плагины, для добавления функциональности серверу или приложению?Я так думаю, но чтобы быть уверенным.
2. Можно ли развернуть целое (и простое) веб-приложение, используя только такой инструмент, как Werkzeug?
2a.Если да: какие преимущества предлагают специализированные веб-фреймворки по сравнению с этими инструментами?Я знаю, что Flask построен поверх Werkzeug, так что же Flask добавляет к нему?
2b.Если нет: что это за оператор return Response() в примере кода?Я неправильно понимаю концепцию веб-фреймворка / приложения?

Заранее спасибо.

...