python基础教程总结15——6 CGI远程编辑
功能:
将文档作为普通网页显示;
在web表单的文本域内显示文档;
保存表单中的文本;
使用密码保护文档;
容易拓展,支持处理多余一个文档的情况
1.CGI
CGI(Comment Gateway Interface,通用网关接口),是网络服务器可以将查询(一般来说通过Web表单)传递到专门的程序(比如python程序)中并且在网页上显示结果的标准机制。它是创建万维网应用程序而不用编写特殊用途的应用服务器的简单方法。绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

#简单的网页编辑器(simple_edit.cgi) import cgi
form=cgi.FieldStorage() text=form.getvalue('text',open('simple_edit.dat').read())
f=open('simple_edit.dat','w')
f.write(text)
f.close()
print """ Content-Type: text/html <html>
<head>
<title>A Simple Editor</title>
</head>
<body>
<form action='simple_edit.cgi' method='POST'>
<textarea rows='10' cols='20' name='text'>%s</textarea><br />
<input type='submit' />
</form>
</body>
</html>
""" % text
3. 再次实现
index.html:一个带有能输入文件名的表单的网页,包括一个触发edit.cgi的打开(Open)按钮;
edit.cgi:在文本域中显示给定文件的脚本,并且由输入密码的文本框和触发save/cgi的保存(Save)按钮;
save.cgi:保存收到的文本到给定文件的脚本,并且显示简单的信息(比如"文件已被保存")脚本还可以检查密码;
1)创建文件名表单 index.html
<html>
<head>
<title>File Editor</title>
</head>
<body>
<form action='edit.cgi' method='POST'>
<b>File name:</b><br />
<input type='text' name='filename' />
<input type='submit' value='Open' />
</body>
</html>
2)创建编辑器脚本edit.cgi,用来接受index页面的名字,然后根据名字查找文件,并且输出
#! E:\Python27\python.exe print 'Content-type: text/html\n' from os.path import join, abspath
import cgi,sys BASE_DIR = abspath('data') form = cgi.FieldStorage()
filename = form.getvalue('filename')
if not filename:
print 'Please enter a file name'
sys.exit() try:
text = open(join(BASE_DIR,filename)).read()
except Exception,data:
print str(data) print """
<html>
<head>
<title>Editing...</title>
</head>
<body>
<form action='/test/cgi-bin/save.cgi' method='POST'>
<b>File:</b>%s<br/>
<input type='hidden' value='%s' name='filename'/>
<b>Password:</b><br/>
<input name='password' type='password' /><br/>
<b>Text:</b><br/>
<textarea name='text' cols='40' rows='20'>%s</textarea><br/>
<input type='submit' value='Save' />
</form>
</body>
</html>
""" % (filename, filename, text)
3)实现保存功能的脚本 save.cgi
#! E:\Python27\python.exe
print 'Content-type: text/html\n' from os.path import join, abspath
import cgi, sha, sys BASE_DIR = abspath('data') form = cgi.FieldStorage() text = form.getvalue('text')
filename = form.getvalue('filename')
password = form.getvalue('password') if not (filename and text and password):
print 'Invalid parameters'
sys.exit() if sha.sha(password).hexdigest() != '8843d7f92416211de9ebb963ff4ce28125932878':
print 'Invalid password'
sys.exit() f = open(join(BASE_DIR,filename), 'w')
f.write(text)
f.close() print 'The file has been saved.'
使用:
1)浏览器中打开index.html: http://localhost/cgi-bin/index.html

2)输入编辑器允许修改的文件名字,点击Open。之后浏览器应该包括edit.cgi脚本的输出内衣
3)用户可以随意修改文件,输入密码(自己设定或例子中的foobar),点击Save。之后的浏览器应该包括save.cgi的输出“The file has been saved"
python基础教程总结15——6 CGI远程编辑的更多相关文章
- python基础教程总结15——7 自定义电子公告板
1. Python进行SQLite数据库操作 简单的介绍 SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它是遵守ACID的关联式数据库 ...
- python基础教程总结15——5 虚拟茶话会
聊天服务器: 服务器能接受来自不同用户的多个连接: 允许用户同时(并行)操作: 能解释命令,例如,say或者logout: 容易拓展 套接字和端口: 套接字是一种使用标准UNIX文件描述符(file ...
- python基础教程总结15——4 新闻聚合
NNTP:网络新闻传输协议,Network News Transfer Protocol 目标: 从多种不同的来源收集新闻: 用户可以轻松添加新的新闻来源(甚至是新类型的新闻来源: 程序可以将编译好的 ...
- python基础教程总结15——3 XML构建网址
要求: 网址用一个XML文件描述,其中包括独立网页和目录的信息: 程序能创建所需的目录和网页: 可以改变网址的设计,并且以新的设计为基础重新生成所有网页 概念: 网站:不用存储有关网站本身的任何信息, ...
- python基础教程总结15——1.即时标记
1. 测试文档: # test_input.txt Welcome to World Wide Spam. Inc. These are the corporate web pages of *Wor ...
- python基础教程总结15——2 画幅好画
要求:从Internet上下载数据文件: 分析数据文件并提取感兴趣的部分 工具:图形生成包(ReportLab,PYX等) 数据:太阳黑子和射电辐射流量(http://services.swpc.n ...
- Python基础教程(第2版 修订版) pdf
Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...
- Python基础教程(第3版)PDF高清完整版免费下载|百度云盘
百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...
- Python 基础教程 —— 网络爬虫入门篇
前言 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言,它由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年.自面世以后,Pytho ...
随机推荐
- Matcher的replaceAll ()/appendReplacement()/appendTail()详细举例
直接上例子: package com.dajiangtai.djt_spider.util; import java.util.regex.Matcher;import java.util.regex ...
- 一个基于Tp3.2(thinkphp3.2)的工会管理系统
该系统包括11个模块. 会员管理模块 奖惩管理模块 运动会管理模块 新闻管理模块 文档管理模块 经费管理模块 电子提案管理模块 用户管理模块 权限管理模块 系统管理模块 系统的登录 系统主页 这里只是 ...
- HDU - 1150 POJ - 1325 Machine Schedule 匈牙利算法(最小点覆盖)
Machine Schedule As we all know, machine scheduling is a very classical problem in computer science ...
- JavaScript 语言的历史
说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.诞 ...
- codevs1229 数字游戏
1229 数字游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解
- IT兄弟连 JavaWeb教程 AJAX中参数传递问题
使用Ajax发送GET请求并需要传递参数时,直接在URL地址后拼接参数,格式如下: xhr.open('get','请求路径?参数名1=参数值1&参数名2=参数值2...',true); 使用 ...
- 初探 Nginx 架构
转载自:http://wiki.jikexueyuan.com/project/nginx/nginx-framework.html Nginx 在启动后,在 unix 系统中会以 daemon 的方 ...
- STP-14-MST配置
在配置MST之前,工程师要进行一定程度的预先规划.首先,必须决定是否应该使用多区域设计,以及如何设置边界.多区域的设计使得每个区域都有独立的MST实例编号.VLAN到实例的映射,以及独立的实例根.整体 ...
- 用 scp 命令通过 SSH 互传文件
上传单个文件到远程服务器 命令格式 scp [/path/local_dir/filename] [username@servername:/path/remote_dir] 上传本地的 vimrc ...
- Jmeter4.0----设置集合点_并发(11)
1.说明 LR中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的. jmeter中使用Synchronizing Timer实现L ...