Нужен хороший WSGI гид для начинающих - PullRequest
3 голосов
/ 12 марта 2012

У меня есть почти полное простое веб-приложение, написанное как скрипт Python CGI.Я хотел бы изменить его на использование WSGI, но я не могу найти документацию, которая бы помогла мне понять, что на самом деле представляет собой WSGI (можно только несколько раз находить вызовы с start_response и т. Д., Но кажется, что нет большого объяснения, почемузвонки на самом деле делают).Может кто-нибудь указать мне хорошее объяснение, а также инструкции по использованию WSGI?

Редактировать : Следует добавить, что я видел этот вопрос , но ответы все еще не говорят о том, как использовать WSGI в прямом сценарии (какв отличие от в рамках).

Ответы [ 2 ]

9 голосов
/ 12 марта 2012

WSGI - это PEP 333 PEP3333 для Python 3), он же интерфейс шлюза веб-сервера.Он состоит из трех частей, но вас интересует, как вы пишете приложение WSGI.А приложение WSGI - это вызываемый объект, который принимает два аргумента и возвращает итеративный объект (или является генератором).

# this is my_app module
def app(environ, start_response):
    # environ is dict-like object containing the WSGI environment
    # refer to the PEP for details

    # start_response is a callable that, well, starts the response
    headers = [('Content-Type', 'text/plain; charset=utf-8')]
    start_response('200 OK', headers)

    return ["I'm a WSGI application.\n"]

Для запуска приложения вам необходима другая часть WSGI, которая является шлюзом.В стандартной библиотеке вы найдете пакет wsgiref.Он содержит шлюз CGI:

#!/usr/bin/python
# this is a CGI script that runs a WSGI application inside CGI handler
from wsgiref.handlers import CGIHandler
from my_app import app
CGIHandler().run(app)

, а также простой HTTP-сервер для разработки:

from wsgiref.simple_server import make_server
from my_app import app
httpd = make_server('localhost', 8000, app)
httpd.serve_forever()

Как видите, WSGI позволяет вам повторно использовать ваше приложение в различных средах - CGI, SCGI, FastCGI, mod_wsgi, mod_python и т. Д., Фактически не переписывая его.

Последняя часть WSGI является промежуточным программным обеспечением - в основном, это концепция, которая позволяет комбинировать различные приложения WSGI.Он формирует своего рода сэндвич - потоки запросов сверху вниз (шлюз) вниз (обычно это ваше приложение) с промежуточными слоями между ними, которые могут реализовывать такие вещи, как пул соединений с базами данных или сеансы.wsgiref содержит одно такое промежуточное программное обеспечение - wsgiref.validate.validator, которое проверяет, соответствуют ли слои ниже и выше его правилам спецификации WSGI.

И это в основном все.Теперь иди использовать рамки.

0 голосов
/ 12 марта 2012

Попробуйте перейти прямо к источнику - PEP 333 , спецификация WSGI.

...