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

一、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("")

在上面的程序中,第一行声明了程序使用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('')

在上面的代码中,我们从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元素,并打开一个本地文件,将上传的文件内容写入该文件。接着,我们使用字符串格式化函数构造了一个包含文件名和文件内容的HTML页面。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/291583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-25 14:06
下一篇 2024-12-25 14:06

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29

发表回复

登录后才能评论