简单的wsgi应用

流夜未央 posted @ 2011年5月12日 14:46 in 未分类 , 2392 阅读

这个模块实现了一个简单HTTP 服务(基于BaseHTTPServer),为WSGI应用提供服务。每个服务实例在一个给定的主机和端口上为一个单一的WSGI应用提供服务。如果你想 要在一个单一的主机和端口上为多个应用提供服务,你可以创建一个WSGI应用,解析PATH_INFO为每个请求选择调用的应用。(例如,使用 wsgiref.util中的shift_path_info()函数。)

make_server(host, port, app [, server_class=WSGIServer [, handler_class=WSGIRequestHandler]])

创建一个新的监听在host和port上的WSGI服务,为app接收连接。返回值是一个提供的server_class实例,并且使用指定的handler_class处理请求。app必须是一个定义在PEP 333中的WSGI应用对象。

例子用法

from wsgiref.simple_server import make_server, demo_app

httpd = make_server('', 8000, demo_app)

print "Serving HTTP on port 8000..."

# Respond to requests until process is killed

# 响应请求直到进程被杀死

httpd.serve_forever()

# Alternative: serve one request, then exit

# 二择一:服务一个请求,然后退出

##httpd.handle_request()

demo_app(environ, start_response)

这个函数是一个小的但完整的WSGI应用,返回一个包含“Hello world!”信息的文本页和在environ参数中提供的key/value对的一个列表。它的作用是检查一个WSGI服务(如wsgiref.simple_server)能正确地运行一个简单的WSGI应用。

Class WSGIServer(server_address, RequestHandlerClass)

创建WSGIServer实例。server_address应该是(host,port)元组,RequestHandlerClass应该是BaseHTTPServer的子类。BaseHTTPRequestHandler将被用来处理请求。

你通常地不需要调用构造函数,同样地make_server()函数可以为你处理所有详情。

WSGIServer是BaseHTTPServer.HTTPServer的子类,所以所有它的方法(如server_forever()和handle_request())可用。WSGIServer也提供这些特定的WSGI方法:

set_app(application)
设置回调application作为WSGI应用接收请求。

get_app()
返回当前设置地应用回调。

通常地,尽管,你不需要使用这些额外的方法,像set_app()通常被make_server()调用一样,get_app()主要地为请求处理实例的好处存在。

Class WSGIRequestHandler(request, client_address, server)
为给定的request(如,一个socket),client_address(一个(host,port)元组),和server(WSGIServer实例)创建一个HTTP处理程序。

你不需要直接地创建这个类的实例;它被自动地创建依照WSGIServer对象需要的。你可以,尽管,这个类子类作为handler_class提供给make_server()函数。子类中重载一些可能相关的方法:

get_environ()
为请求返回一个包含WSGI环境的字典。缺省实现复制WSGIServer对象的base_environ字典属性的内容,然后添加从HTTP请求中派生的各种头。每次调用这个方法,应该返回一个新的包含所有PEP 333中规范的相关的CGI环境变量的字典。

get_stderr()
返回作为wsgi.errors流使用的对象。缺省实现仅返回sys.stderr()。

handle()
处理HTTP请求。缺省实现用一个wsgiref.handlers类创建一个处理程序实例,实现实际的WSGI应用接口。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter