Python CGI 编程学习笔记
什么是CGI
CGI,全称是Common Gateway Interface,是Web服务器运行外部程序的一种标准接口,是实现Web与其他程序的交互的一种方式。
Python中的CGI模块
Python中的CGI模块,可以让我们在Web服务器上运行Python程序,来响应用户的请求。CGI程序通常以.py为扩展名,需要将这个程序放置到Web服务器上的cgi-bin目录中,浏览器请求cg程序时,会将请求发送到Web服务器,Web服务器接收到请求后会运行相应的CGI程序,并将结果返回给浏览器。
下面是一个简单的Python CGI程序示例:
pythonCopy Code#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入CGI模块
import cgi
# 创建FieldStorage实例
form = cgi.FieldStorage()
# 获取name、age表单字段的数据
name = form.getvalue('name')
age = form.getvalue('age')
# 输出HTML响应内容
print("Content-type:text/html")
print()
print("<html>")
print("<head>")
print("<title>CGI 测试</title>")
print("</head>")
print("<body>")
print("<h2>%s 的年龄是 %s</h2>" % (name, age))
print("</body>")
print("</html>")
该程序接收两个表单字段name和age的数据并输出响应内容。
CGI 环境变量
CGI程序可以通过读取CGI环境变量来获取浏览器请求的信息,下面列出一些常用的CGI环境变量:
- CONTENT_TYPE:请求的MIME类型,用于POST请求的表单数据
- CONTENT_LENGTH:请求体的大小(字节)
- QUERY_STRING:请求参数字符串
- REMOTE_ADDR:客户端IP地址
- REQUEST_METHOD:请求方法(GET、POST、HEAD等)
- SCRIPT_FILENAME:CGI程序的完整路径
- SERVER_NAME:服务器主机名或IP地址
- SERVER_PORT:服务器端口号
CGI 文件上传
通过CGI模块还可以实现文件上传功能,如下是一个文件上传的示例:
pythonCopy Code#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cgi, os
import cgitb; cgitb.enable()
# 创建FieldStorage实例
form = cgi.FieldStorage()
# 获取上传的文件字段filename和filedata
fileitem = form['filename']
# 检查文件是否上传
if fileitem.filename:
# 设置文件路径
fn = os.path.basename(fileitem.filename)
open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = '文件 "' + fn + '" 上传成功!'
else:
message = '文件上传失败!'
print("Content-type:text/html")
print()
print("<html>")
print("<head>")
print("<title>文件上传结果</title>")
print("</head>")
print("<body>")
print("<h2>%s</h2>" % message)
print("</body>")
print("</html>")
该程序接收一个文件上传字段filename,并将文件写入/tmp目录中。