Python 中的 CGI 是什么?
CGI(Common Gateway Interface)是一种用于 Web 服务器与应用程序之间通信的标准协议。在 Python 中,CGI 程序可以使用标准的 CGI 模块来处理 HTTP 请求和响应。本文将介绍 Python 中的 CGI,并给出示例代码说明如何编写简单的 CGI 程序。
阅读更多:Python 教程
什么是 CGI?
CGI 是一种为 Web 服务器与应用程序交互通信的标准协议,它通过在 URL 中指定 CGI 调用并传递参数,将 HTTP 请求传递给处理程序,并将响应返回给服务器。CGI 程序可以用任意编程语言编写,只要它遵循标准的 CGI 协议。在 Python 中,CGI 程序可以使用标准的 CGI 模块来处理 HTTP 请求和响应。
如何编写 CGI 程序?
在 Python 中编写 CGI 程序需要遵循以下几个步骤:
- 首先,需要在 Web 服务器上设置一个 CGI 调用。这通常需要在 Web 服务器的配置文件中指定一个目录,使其能够运行 Python 解释器并执行 CGI 程序。
- 然后,需要编写一个 Python 脚本,用于处理 HTTP 请求并生成响应。这通常需要通过使用标准的 CGI 模块来获取 HTTP 请求中的数据,并将响应发送回服务器。
- 最后,可以使用标准的 HTML 表单来调用 CGI 程序并传递参数。在 HTML 表单中,可以指定一个 URL(即 CGI 调用),并设置一些参数,如下所示:
<form action="/cgi-bin/myscript.py" method="POST">
<input type="text" name="input1">
<input type="text" name="input2">
<input type="submit" value="Submit">
</form>
在这个例子中,我们指定了一个 URL:“/cgi-bin/myscript.py”,它将调用名为“myscript.py”的 Python 脚本。我们还设置了两个文本字段,名称为“input1”和“input2”,并给表单添加了一个提交按钮。
下面是一个简单的 Python CGI 程序的示例。这个程序获取 HTTP 请求中的参数,并将它们显示在响应中:
#!/usr/bin/python
import cgi
print("Content-type: text/html")
print()
params = cgi.FieldStorage()
input1 = params.getvalue("input1")
input2 = params.getvalue("input2")
print("<html><head><title>My CGI Program</title></head>")
print("<body>")
print("<p>Input 1 was: {}</p>".format(input1))
print("<p>Input 2 was: {}</p>".format(input2))
print("</body></html>")
在这个示例程序中,我们首先通过导入 CGI 模块来获取 HTTP 请求中的参数。然后,我们使用 print() 函数输出 HTTP 响应的头部。注意,头部必须以“Content-type”行开头,并设置为“text/html”。最后,我们在响应正文中输出网页的 HTML 代码,其中包含用户输入的值。
如何在 Apache Web 服务器上运行 Python CGI 程序?
在 Apache Web 服务器中运行 Python CGI 程序需要以下步骤:
- 在 Web 服务器上安装 Python 解释器。
- 配置 Apache Web 服务器以允许 CGI 程序运行。这需要在 Apache 的配置文件中设置一些选项,如下所示:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
在这个例子中,我们将 CGI 程序存放在目录“/usr/lib/cgi-bin/”中,然后在Apache 配置文件中设置了一个 ScriptAlias 指令,将 URL 中的“/cgi-bin/”映射到该目录。然后,我们使用 Directory 指令设置一些选项,使 Apache 允许执行 CGI 程序。
- 编写 Python CGI 程序,并将其保存到“/usr/lib/cgi-bin/”目录下。确保该文件有执行权限。
-
访问 CGI 程序的 URL。可以通过在浏览器中输入 URL 或使用类似 curl 的命令行工具来访问 CGI 程序的 URL。
示例:计算两个数的和
下面是一个简单的 Python CGI 程序,用于计算两个数的和。这个程序从 HTTP 请求中获取两个数值,并计算它们的和,然后在响应中显示结果。
#!/usr/bin/python
import cgi
print("Content-type: text/html")
print()
params = cgi.FieldStorage()
num1 = int(params.getvalue("num1"))
num2 = int(params.getvalue("num2"))
result = num1 + num2
print("<html><head><title>Calculator</title></head>")
print("<body>")
print("<p>First number: {}</p>".format(num1))
print("<p>Second number: {}</p>".format(num2))
print("<p>Result: {}</p>".format(result))
print("</body></html>")
在这个示例程序中,我们首先获取 HTTP 请求中传递的两个数值参数。我们还将它们转换为整数以便进行计算。然后,我们计算它们的和,并将结果输出到 HTTP 响应中。
使用这个程序的方法如下:
- 将程序保存为“/usr/lib/cgi-bin/add.py”。
- 在浏览器中输入“http://example.com/cgi-bin/add.py?num1=3&num2=4”,其中“example.com”是 Web 服务器的域名或 IP 地址,以及 num1 和 num2 的值是要计算它们的和的值。
- 单击“Submit”按钮并查看结果。
结论
CGI 是一种用于 Web 服务器与应用程序之间通信的标准协议。在 Python 中,CGI 程序可以使用标准的 CGI 模块来处理 HTTP 请求和响应。通过在 Web 服务器上配置 CGI 调用,并编写 Python CGI 程序,我们可以轻松地处理用户提交的表单数据,以及执行其他各种任务,如文件上传、数据库查询等。