WSGI является PEP 333 (и PEP3333 для Python 3), a.k.a. Интерфейс шлюза веб-сервера. Он состоит из трех частей, но интересующая вас часть - это то, как вы пишете приложение 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.
И это в основном это. Теперь идите в рамки.
К сожалению, я только что нашел [это руководство от Armin Ronacher] (http://lucumr.pocoo.org/2007/5/21/getting-started-with-wsgi/), который, кажется, был тем, что я искал , Рекомендуется для других. Не думаю, что этот вопрос, я думаю, так просит других. – ShankarG