📅  最后修改于: 2023-12-03 14:49:28.773000             🧑  作者: Mango
CGI(Common Gateway Interface)允许 Web 服务器运行程序并将结果返回到客户端浏览器。在数据处理过程中,输入和输出是关键点。本文将介绍从输入输出到数据库的 CGI 过程。
Web 服务器在接收到客户端的请求后,共享数据作为 CGI 输入的方式。这些数据可以是两种类型:查询字符串或标准输入。查询字符串是一组键/值对,这些键/值对是 URL 的一部分,以问号开始(由浏览器提交给服务器)。标准输入是通过 POST 方法在 HTTP 请求正文中提供的表单数据。
查询字符串是 Web 服务器向 CGI 脚本发送的信息,可以通过许多语言和库解析和解码。以下是 Python 中解析查询字符串的示例:
import cgi
query_string = "name=John&age=27"
data = cgi.parse_qs(query_string)
print(data)
# {'name': ['John'], 'age': ['27']}
标准输入是 POST 方法中提交的表单数据。在 Python 中,可以使用 cgi.FieldStorage()
对象访问标准输入,如下所示:
import cgi
form = cgi.FieldStorage()
name = form.getvalue('name')
age = form.getvalue('age')
CGI 脚本的输出是向客户端浏览器发送的数据。我们可以使用标准输出来将 HTML 或者其他类型数据发送到客户端。
以下是 Python 中输出 HTML 的示例:
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<title>Hello World - First CGI Program</title>")
print("</head>")
print("<body>")
print("<h2>Hello World! This is my first CGI program</h2>")
print("</body>")
print("</html>")
除了 HTML 之外,我们还可以将任何其他类型的数据发送到客户端浏览器。下面是 Python 中输出 JSON 的示例:
import json
data = {'name': 'John', 'age': 27}
json_data = json.dumps(data)
print("Content-type: application/json\r\n\r\n")
print(json_data)
通过 CGI,我们可以访问和操纵数据库。下面是一个简单的 Python MySQL 示例:
import pymysql
db = pymysql.connect(host="localhost", user="root",
password="password", database="mydatabase")
cursor = db.cursor()
# 执行 SQL 查询语句
cursor.execute("SELECT * FROM customers")
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
id = row[0]
name = row[1]
address = row[2]
city = row[3]
print("ID: %d, Name: %s, Address: %s, City: %s" % \
(id, name, address, city))
# 关闭数据库连接
db.close()
以上就是从输入输出到数据库的 CGI 编程过程。要注意的是,在输出和数据库操作中,都需要先向客户端浏览器发送正确的 HTTP 标头。具体的标头取决于我们要发送的内容类型。