<p>WSGI代表Web服务器网关接口(主要由PEP 333在<a href="http://www.python.org/dev/peps/pep-0333/">http://www.python.org/dev/peps/pep-0333/</a>定义)。</p>
<p>Python社区致力于为web服务器建立一种与Python应用程序对话的标准机制。</p>
<p>理论上,任何符合wsgi的服务器(或现有web服务器的扩展)都应该能够加载和运行任何符合wsgi的应用程序。</p>
<p><strong>werkzeug</strong>是一个web应用程序框架,可以在兼容的WSGI服务器下运行,比如Apache+mod_WSGI。它还包含可用于开发的内置开发服务器。</p>
<hr/>
<p>一开始WSGI可能非常混乱,但实际上它非常简单。WSGI规范要求python应用程序执行以下操作:</p>
<ol>
<li>定义一个名为<code>application</code>的可调用</li>
<li>所述可调用应接受2个参数:(<code>environ</code>,<code>start_response</code>)</li>
<li><code>environ</code>是一个环境变量字典</li>
<li><code>start_response</code>是一个可调用的,需要调用它来启动响应</li>
</ol>
<p>调用<code>application</code>后,它将处理请求,生成输出,并:</p>
<ol>
<li>呼叫<code>start_response('200 OK', Headers)</code></li>
<li><code>return [content]</code></li>
</ol>
<p>一个简单的WSGI应用程序可能如下所示:</p>
<pre><code>def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
</code></pre>
<p>强烈建议您使用现有的WSGI框架,因为在解析HTTP请求、处理文件上载、编码字符等方面有很多细节。。。</p>
<p>看看瓶子、烧瓶、werkzeug、AppStruct等。。。</p>