Python Web框架,WSGI和CGI如何组合在一起

问题:

我有一个Bluehost帐户,我可以运行Python脚本作为CGI。我想这是最简单的CGI,因为运行我必须在.htaccess中定义以下内容

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

现在,每当我使用Python查找Web编程时,我都会听到很多关于WSGI和大多数框架使用它的信息。但是我只是不了解它们是如何组合在一起的,特别是当我的Web服务器(Apache在主机的机器上运行)时,而不是我真正玩的东西(除了定义.htaccess命令)。
WSGI,CGI和框架如何连接?如果我想在我的基本CGI配置上运行一个Web框架(如web.pyCherryPy),我需要知道,安装和做什么?如何安装WSGI支持?

回答:

 WSGI,CGI和框架如何连接?
Apache侦听端口80.它获取HTTP请求。它解析请求以找到一种方式来响应。 Apache有很多选择。一种回应方法是使用CGI来运行脚本。另一种回应方式是简单地提供文件。
在CGI的情况下,Apache准备一个环境,并通过CGI协议调用该脚本。这是一个标准的Unix Fork / Exec情况 – CGI子进程继承了包含socket和stdout的操作系统环境。 CGI子进程写入响应,返回到Apache; Apache将此响应发送到浏览器。
CGI是原始和烦人的。主要是因为它为每个请求分配一个子进程,子进程必须退出或关闭stdout和stderr来表示响应的结束。
WSGI是基于CGI设计模式的接口。它不一定是CGI – 它不必为每个请求分叉子进程。它可以是CGI,但不一定是。
WSGI以几种重要方式增加了CGI设计模式。它将为您解析HTTP请求标头,并将其添加到环境中。它在环境中提供任何面向文件的对象的面向POST的输入。它还为您提供了一个功能来制定响应,从而节省了大量格式化细节。
 如果我想在我的基本CGI配置上运行一个Web框架(比如web.py或cherrypy),我需要知道/安装/做什么?
回想一下,分割子进程是昂贵的。有两种方法可以解决这个问题。

  1.  嵌入式 mod_wsgimod_python将Python嵌入到Apache中;没有进程被分叉。 Apache直接运行Django应用程序。
  2.  守护进程 mod_wsgimod_fastcgi允许Apache使用WSGI协议与单独的守护程序(或“长期运行的进程”)进行交互。您启动长时间运行的Django进程,然后配置Apache的mod_fastcgi与此进程通信。

请注意,mod_wsgi可以在任一模式下工作:嵌入式或守护程序。
当您阅读mod_fastcgi时,您将看到Django使用flup从mod_fastcgi提供的信息创建一个WSGI兼容界面。管道这样做。

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

Django为各种接口提供了几个“django.core.handlers”。
对于mod_fastcgi,Django提供了一个集合FLUP和处理程序的manage.py runfcgi
对于mod_wsgi,有一个核心处理程序。
 如何安装WSGI支持?
按照这些说明。
 http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
为了背景看这个
 http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How Python web frameworks, WSGI and CGI fit together

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

21 − = 14