我有一个Bluehost帐户,在那里我可以作为CGI运行Python脚本。我想这是最简单的CGI,因为要运行,我必须在.htaccess中定义以下内容:
选项+执行CGI
AddType text/html-py
AddHandler cgi脚本.py
现在,每当我使用Python查看web编程时,我都会听到很多关于WSGI以及大多数框架如何使用它的信息。但我只是不明白这一切是如何结合在一起的,尤其是当我的web服务器被提供(Apache在主机上运行)而不是我真正可以使用的东西时(除了定义.htaccess命令)
WSGI、CGI和框架是如何连接的?如果我想在我的基本CGI配置上运行一个web框架(比如web.py或CherryPy),我需要知道、安装和做什么?如何安装WSGI支持
WSGI、CGI和框架如何连接?
Apache侦听端口80。它得到一个HTTP请求。它解析请求以找到响应的方法。Apache有很多选择来响应。一种响应方法是使用CGI运行脚本。另一种响应方式是简单地提供一个文件
对于CGI,Apache准备一个环境并通过CGI协议调用脚本。这是一种标准的Unix Fork/Exec情况——CGI子进程继承一个OS环境,包括套接字和标准输出。CGI子流程编写一个响应,返回Apache;Apache将此响应发送到浏览器
CGI既原始又烦人。主要是因为它为每个请求派生一个子流程,子流程必须退出或关闭stdout和stderr以表示响应结束
WSGI是一个基于CGI设计模式的接口。它不一定是CGI——它不必为每个请求派生子进程。它可以是CGI,但不一定是
WSGI以几种重要的方式添加到CGI设计模式中。它为您解析HTTP请求头并将其添加到环境中。它在环境中作为类似文件的对象提供任何面向后期的输入。它还为您提供了一个函数,该函数将对响应进行公式化,从而避免了大量格式化细节
如果我想在基本CGI配置上运行web框架(比如web.py或cherrypy),我需要知道/安装/做什么?
回想一下,分叉子流程是非常昂贵的。有两种方法可以解决这个问题
-
Embedded
mod_wsgi或mod_python将python嵌入Apache内部;没有过程是分叉的。Apache直接运行Django应用程序 -
守护进程
mod_wsgi或mod_fastcgi允许Apache使用wsgi协议与单独的守护进程(或“长时间运行的进程”)交互。启动长时间运行的Django进程,然后配置Apache的mod_fastcgi与该进程通信
请注意,mod_wsgi可以在两种模式下工作:嵌入式或守护进程
当您阅读mod_fastcgi时,您将看到Django使用flup根据mod_fastcgi提供的信息创建与WSGI兼容的接口。管道是这样工作的
Apache->;mod_fastcgi->;FLUP(通过FastCGI协议)——>;Django(通过WSGI协议)
Django为各种接口提供了几个“Django.core.handlers”
对于mod_fastcgi,Django提供了一个集成FLUP和处理程序的manage.py runfcgi
对于mod_wsgi,有一个用于此的核心处理程序
如何安装WSGI支持?
按照这些说明操作
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
背景见此
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-部署索引