Питон - статьи


Практика - часть 2


Just show your environment.</p><p><ul>'] + ['<li> %s => %s</li>' % (str(k), str(environ[k])) for k in sorted_keys] + ['</ul></p></body></html>'] return result

if __name__ == '__main__': import sys import helper

server = helper.get_arg(sys.argv, "Usage: trivial_wsgi_app.py package.wsgi.server_callable") server(app)

Немного "усложнили" приложение - теперь оно показывает доступные переменные окружения, ну и плюс код, запускающий парный компонент - WSGI-сервер, переданный как параметр.

А "тривиальный сервер" стал выглядеть так:

from wsgiref import simple_server, validate

class TrivialWSGIServer(object): def __init__(self, app): self.app = app self.server = simple_server.WSGIServer( ('', 8080), simple_server.WSGIRequestHandler, ) self.server.set_app(validate.validator(self.app))

def serve(self): self.server.serve_forever()

def runner(app): TrivialWSGIServer(app).serve()

if __name__ == '__main__': import sys import helper

app = helper.get_arg(sys.argv, "Usage: trivial_wsgi_server.py package.wsgi.app") runner(app)

У него добавились: "исполнитель" runner, чтобы в один шаг запускать приложение на запуск и код для запуска парного компонента - WSGI-приложения. Отмечу одну из "прослоек" (middleware), которая здесь используется - validator - проверяет, что "диалог" между сервером и приложением идет в рамках стандарта.

Запуск осуществляется следующим образом:

trivial_wsgi_app.py trivial_wsgi_server.runner

или так:

trivial_wsgi_server.py trivial_wsgi_app.app

Усложняем задачу. Теперь напишем WSGI-сервер средствами Twisted, но с таким же "интерфейсом запуска"

from twisted.internet import reactor from twisted.web2 import wsgi, channel, server

class TwistedWSGIServer(object): def __init__(self, app): self.app = app self.wsgi_res = wsgi.WSGIResource(app) self.site = server.Site(self.wsgi_res) self.factory = channel.HTTPFactory(self.site)




Начало  Назад  Вперед