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.
И это в основном все.Теперь иди использовать рамки.