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

伊莱·本德斯基(Eli Bendersky):

我有一个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子进程继承了包括套接字和标准输出的OS环境。CGI子进程编写一个响应,该响应可以返回到Apache。Apache将此响应发送到浏览器。

CGI是原始且令人讨厌的。主要是因为它为每个请求派生一个子流程,并且该子流程必须退出或关闭stdout和stderr来表示响应结束。

WSGI是基于CGI设计模式的接口。它不一定是CGI,也不必为每个请求派生一个子进程。可以是CGI,但不一定如此。

WSGI以几种重要方式添加了CGI设计模式。它为您解析HTTP请求标头,并将其添加到环境中。它提供任何面向POST的输入,作为环境中的类似文件的对象。它还为您提供了可以制定响应的功能,从而使您免于许多格式设置细节。

如果要在基本CGI配置上运行Web框架(例如web.py或cherrypy),我需要知道/安装/做什么?

回想一下,分叉子过程很昂贵。有两种方法可以解决此问题。

  1. 在Apache中嵌入mod_wsgimod_python嵌入Python;没有分叉的过程。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提供了一个manage.py runfcgi集成了FLUP和处理程序的。

对于mod_wsgi,有一个核心处理程序。

如何安装WSGI支持?

请遵循以下说明。

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

对于背景,请参阅此

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将python asyncio与线程结合在一起?

Python:如何精确地取一个字符串,将其拆分,反转和重新结合在一起?

Python将format方法与使用LaTeX的长字符串结合在一起

如何在Python中收集一组布尔值并返回最终将“ AND”与“ AND”结合在一起的最终测试?

将相同的函数与不同的参数结合在一起-Python

Python:如何使数组的每个术语重复,并且将相同的术语组合在一起

如何在Python中将两个具有相同索引的Series组合在一起?

我如何在Python中将综合与ordereddict结合在一起?

python regex将模式与AND和group结合在一起

将目标和jacobian结合在一起以使Python的外观最小化

在Python中将两个时间序列与datetime索引的不同元素结合在一起

如何将Python数据框的信息输出与唯一计数列表结合在一起

Python将每月和分钟数据帧与可识别TZ的日期时间索引结合在一起

如何在Python中的特定数组索引处将2个列表缝合在一起

如何使用python熊猫将销售预测,计划交货和当前库存组合在一起以计划将来的库存

将Python预编译的安装程序与软件包管理器结合在一起

如何使用Python将由列表组成的值与字典中的常见项目结合在一起?

如何使用python将头文件与数据文件结合在一起?

如何在Python中将3个元组组合在一起

在Python中,如何将多个轴组合在一起?

如何在 Python 中将相同的字典值组合在一起并计算值?

如何将列表中的某些项目组合在一起 - Python3

Python:如何将for循环和while循环结合在一起?

Python 将元组组合在一起

将python中的值组合在一起

python - 创建一个将名字和姓氏列与 IF 语句组合在一起的列

如何将 Python 中的值组合在一起?

如何將多個 Python 函數融合在一起

如何从使用python组合在一起的相同类型的字符串中删除