当前分类:python>>正文

利用Python进行CGI编程,实现网页与脚本之间的交互

来源:互联网   更新时间:2023年7月20日  

Python 笔记

一、CGI基础

CGI是“公共网关接口”(Common Gateway Interface)的缩写,它是一个标准,定义了Web服务器与脚本解释器之间的接口。通过CGI,Web服务器可以调用外部脚本解释器,将用户的请求传递给脚本,脚本计算出结果后,把结果返回给Web服务器,由Web服务器将结果发回给用户。

CGI脚本必须可执行,通常是编写一段程序,比如Python,Perl,C语言等程序。Web服务器会调用这个程序,将HTTP请求传递给它。该程序相当于一个网页与后端数据交互的接口。

下面是一个最简单的Python CGI程序实现,该程序会返回一个HTML页面:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

print("Content-type:text/html\r\n\r\n")
print("")
print("")
print("Hello World from CGI")
print("")
print("")
print("

Hello World! This is my first CGI program

") print("") print("")

Hello World! This is my first CGI program

在上面的程序中,第一行声明了程序使用python3作为解释器,第二行声明了编码为UTF-8。接下来就是一些HTML的标签。

二、CGI脚本实现表单提交

表单(form)是HTML的一个重要元素,它可以和CGI进行交互。下面是一个简单的表单,其中包含一个文本框和一个提交按钮:



上面的表单指定了action为"/cgi-bin/form.py",method为post,这意味着它会向CGI脚本发送一个POST请求。表单中的文本框的值会被命名为name,它将作为POST请求的参数发送到后端脚本中。

下面是一个Python CGI脚本,它能够读取表单参数,并返回一个包含参数内容的HTML页面:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import cgi

form = cgi.FieldStorage()
name = form.getvalue('name')

print("Content-type:text/html\r\n\r\n")
print('')
print('')
print('Hello World from CGI')
print('')
print('')
print('

Hello %s! This is my first CGI program

' % (name if name else 'World')) print('') print('')

Hello %s! This is my first CGI program

在上面的代码中,我们从CGI的FieldStorage中读取了表单参数的值,并使用字符串格式化函数构造了一个包含参数内容的HTML页面。

三、CGI脚本实现文件上传

通过CGI,我们可以上传文件到后端的服务器。HTML提供了一个input元素,它的类型(type)为file,当用户点击该元素时,系统会跳出一个文件选择对话框,用户可以选择需要上传的文件。



上面的代码指定了form的method为POST,并且enctype为multipart/form-data,这样做可以支持文件上传。用户上传的文件会在后端脚本的FieldStorage对象中以文件的形式存储。

接下来是一个Python CGI脚本,它能够读取用户上传的文件,并将文件内容返回到HTML页面中:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import cgi

form = cgi.FieldStorage()
file_item = form['file']
if file_item.filename:
    with open('/tmp/uploaded_file', 'wb') as fout:
        fout.write(file_item.file.read())

print("Content-type:text/html\r\n\r\n")
print('')
print('')
print('File uploaded')
print('')
print('')
print('

File uploaded successfully!

') if file_item.filename: print('

Filename: %s

' % file_item.filename) print('

Contents:

') print('
')
    with open('/tmp/uploaded_file', 'rb') as fin:
        content = fin.read().decode('utf-8')
        print(html.escape(content))
    print('
') else: print('

No file uploaded

') print('') print('')

File uploaded successfully!

Filename: %s

Contents:

')
    with open('/tmp/uploaded_file', 'rb') as fin:
        content = fin.read().decode('utf-8')
        print(html.escape(content))
    print('

No file uploaded

上面的代码中,我们获取了表单中的file元素,并打开一个本地文件,将上传的文件内容写入该文件。接着,我们使用字符串格式化函数构造了一个包含文件名和文件内容的HTML页面。

本文固定链接:https://6yhj.com/leku-p-4955.html  版权所有,转载请保留本地址!
[猜你喜欢]

标签: 心情