python-web服务器

本文介绍了CGI(Common Gateway Interface)的基本概念,探讨了其在Web服务器与外部应用程序间的作用,以及如何处理用户输入生成动态HTML页面。同时,文章还讲解了Python CGI脚本的运行机制,包括如何使用cgi模块和cgitb模块处理表单数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、CGI简介

Web 最初目的是在全球范围内对文档进行在线存储和归档(大多用于教学和科研)。这些文件通常用静态文本表示,一般是TML。

HTML 是一个文本排版工具,而不像是一种语言,可用于指明字体的类型、大小、样式。HTML 的主要特性是其超文本的兼容性,如突出显示标明一些文本,或用图形元素作为链接,指向其他本地文档或位于网上其他地方的文档。这样就可以通过鼠标单击或者其他用户选择机制来访问相关文档。这些静态 HTML 文档位于 Web 服务器上,在需要的时候会被发送到客户端。

随着因特网和 Web 服务的发展,除了浏览之外,还需要处理用户的输入。如在线零售商需要处理单个订单,网上银行和搜索引擎需要为每个用户建立独立账号。因此出现了表单,它们成为 Web 站点从用户获得特定信息的唯一形式(在 Java applet 出现之前)。反过来,在客户提交了特定数据后,就要求立即生成 HTML 页面。

现在 Web 服务器仅有一点做得很不错,即了解用户需要哪个文件,接着将这个文件(即HTML 文件)发送给客户端。 Web 服务器不能处理表单中传递过来的用户相关的数据。这不是 Web 服务器的职责, Web 服务器将这些请求发送给外部应用,将这些外部应用动态生成的HTML 页面发送回客户端。

处理过程的第一步是 Web 服务器从客户端接到了请求(即 GET 或者 POST),并调用相应的应用程序。它然后等待 HTML 页面,与此同时,客户端也在等待。一旦应用程序处理完成,它会将生成的动态 HTML 页面返回服务器端,然后服务器端再将这个最终结果返回给用户。对于表单处理过程,服务器与外部应用程序交互,收到并将生成的 HTML 页面通过 CGI(Common Gateway Interface)返回客户端。

客户端输入给 Web 服务器端的表单可能包括处理过程和一些存储在后台数据库中的表单。需要记住的是,含有需要用户输入项(如文本框、单选按钮等)、 Submit 按钮、图片的Web 页面,都会涉及某种 CGI 活动。

创建 HTML 的 CGI 应用程序通常是用高级编程语言来实现的,可以接受、处理用户数据,向服务器端返回 HTML 页面。

由于 CGI 有明显的局限性,以及限制 Web 服务器同时处理客户端的数量,因此 CGI 被抛弃了。一些关键的 Web 服务使用 C/C++这样的编译语言进行扩展。如今 Web 服务器典型的部件有 Apache 和集成的数据库访问部件(MySQL 或者 PostgreSQL)、 Java(Tomcat)、 PHP和各种动态语言(如 Python 或 Ruby)模块,以及 SSL/security。

这些新工具虽然进行了浓缩和抽象,但仍旧遵循着 CGI 最初提供的模式,如获取用户输入的信息,根据输入执行相关代码,并提供一个有效的 HTML 作为最终输出传递给客户端。

二、CGI应用程序

CGI 应用程序和典型的应用程序有些不同, 主要的区别在于输入、输出以及用户和程序交互方面。当一个 CGI 脚本启动后,需要获得用户提供的表单数据,但这些数据必须要从 Web 客户端才可以获得,而不是从服务器或者硬盘上获得。这就是大家熟知的请求(request)。

与标准输出不同,这些输出将会发送回连接的 Web 客户端,而不是发送到屏幕、 GUI窗口或者硬盘上。这些返回的数据必须是具有一系列有效头文件的 HTML 标签数据。

三、cgi 模块和cgitb模块

cgi 模块中有个主要类: FieldStorage 类,其完成了所有的工作。 Python CGI 脚本启动时会实例化这个类,通过 Web 服务器从 Web 客户端读出相关的用户信息。在实例化完成后,其中会包含一个类似字典的对象,它具有一系列的键值对。键就是通过表单传入的表单条目的名字,而值则包含相应的数据。

当 Python 程序在命令行或集成开发环境(IDE)中运行时,发生的错误会生成回溯消息,指出错误发生的位置,在浏览器中不会显示回溯消息。若想在浏览器中看到的是 Web 应用程序的回溯信息,而不是“内部服务器错误”,可以使用 cgitb 模块。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值