django ### wsgiref.simple_server   这个模块实现了一个基于__BaseHTTPServer__的轻量级WSGI应用程序的服务器。每个server实例只能在设定的主机和端口上调用一个单一的WSGI应用程序,如果要想调用多个WSGI应用程序,必须手动解析PATH_INFO来给每个request做路由,然后决定调用哪个应用程序。 * wsgiref.simple_server.__make_server(*host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler*)__ 创建一个WSGI server 来监听主机的端口,给*app*接收请求。返回的是*server_class *的实例,并且用指定的*handler_class *来处理request。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() * wsgiref.simple_server.__demo_app(*environ, start_response*)__ 一个小但完整的WSGI应用程序,返回一个text的页面包含“Hello world!”和一个在*environ *中提供的键值对构成的list,这个主要用来测试WSGI 服务器能否正确的运行一个WSGI应用程序。 * __class__ wsgiref.simple_server.__WSGIServer(*server_address, RequestHandlerClass*)__ 创建一个WSGIServer的实例,*server_address*必须为(host, port)的元组,并且*RequestHandlerClass*也必须为__BaseHTTPServer.BaseHTTPRequestHandler__的派生类,否则不能正确的处理请求。 通常这个方法不需要被调用,因为*make_server()*方法可以处理所有的细节。 __WSGIServer__是以__BaseHTTPServer.HTTPServer__为基类的,所以所有BaseHTTPServer.HTTPServer支持的方法都是可用的,比如*server_forever()*、*handle_request()*。__WSGIServer__也提供了专有的方法,比如: * __get_environ()__ 返回WSGI环境变量的dict。默认的实现是,拷贝WSGIServer对象的base_environ dict的内容,然后加上HTTP请求Header导出来的变量再返回。每次请求都会返回PEP 333中定义的包含全部CGI相关的环境变量的全新的dict。 * __get_stderr()__ 返回必须用wsgi.errors流的对象。默认的实现其实就是返回__sys.stderr__。 * __handle()__ 处理HTTP请求。默认的实现是创建一个句柄实例使用__wsgiref.handlers__类来实际的WSGI API。 ### wsgiref.validate   这个模块主要用来检查代码与规范的的一致性。它创建一个在服务器或者网关和应用程序之间检查一致性的function,用以确保两边都相符。   需要注意的是,这个模块并不能保证全部的的PEP 333的规范,它没有报错并不意味错误不存在。但一旦它抛出错误,则服务器或者应用程序端必有错误。   这个模块基于Ian Bicking的 “Python Paste” 库中的__parse.lint__扩展的。 * wsgiref.validate.__validator(*application*)__ 装饰一个*application*并且返回一个新的application,返回的application会跟随原application所有的request,并且检查两边的处理是否都符合WSGI和 RFC 2616 中的定义。 任何检测到的不服从一致性的错误都将以AssertionError抛出来,但需要注意的是,怎么抛出错误和处理是取决于服务器的。比如__simple_server__和其他基于__handlers__的服务器在错误发生时,会输出一个简单的消息,但如果其他的覆盖了错误处理和做了类似处理的服务器就可能不会抛出。 这个装饰器也会用__warnings__模块生成警告,来标识没有明确在PEP 333中禁止但存在问题的行为。除非这些警告被命令行或者__warnings__ API禁止,否则都会被写入到__sys.stderr__。 示例用法: from wsgiref.validate import validator from wsgiref.simple_server import make_server # Our callable object which is intentionally not compliant to the # standard, so the validator is going to break def simple_app(environ, start_response): status = '200 OK' # HTTP Status headers = [('Content-type', 'text/plain')] # HTTP Headers start_response(status, headers) # This is going to break because we need to return a list, and # the validator is going to inform us return "Hello World" # This is the application wrapped in a validator validator_app = validator(simple_app) httpd = make_server('', 8000, validator_app) print "Listening on port 8000...." httpd.serve_forever()