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目录中。