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 ...
随机推荐
- jsp九大内置对象与servlet中java对象
jsp九大内置对象 request对象 : getParameter(String name)获取表单提交的数据 getParamegerNames() 获取客户端提交的所有参数名 getAttri ...
- 8. php回调后门
中国菜刀下载,基于原版中国菜刀优化版20160309. 下载地址: http://pan.baidu.com/s/1jHoJxHW China chopper http://pan.baidu.com ...
- 7.17实习培训日志-java基础
总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...
- ACM-ICPC2018沈阳网络赛 Lattice's basics in digital electronics(模拟)
Lattice's basics in digital electronics 44.08% 1000ms 131072K LATTICE is learning Digital Electron ...
- CodeForces - 1017D Round #502 D. The Wu(状压预处理)
D. The Wu time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Spring Security认证提供程序
1.简介 本教程将介绍如何在Spring Security中设置身份验证提供程序,与使用简单UserDetailsService的标准方案相比,提供了额外的灵活性. 2. The Authentica ...
- 死磕 java同步系列之JMM(Java Memory Model)
简介 Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果. 硬件内存模型 在正式讲解Java的内存模 ...
- [poj]开关类问题 枚举 位运算
poj 1222 EXTENDED LIGHTS OUT 开关只有两种方案 按和不按,按两次相当于关 只用枚举第一排开关的按法即可,剩下的行为使上一排的灯全部关闭,按法可以确定,并且是唯一的. 最后 ...
- Unity3D 自动添加Fbx Animation Event
http://blog.csdn.net/aa20274270/article/details/52528449 using UnityEngine; using System.Collections ...
- ASPNET Core 2.x中的Kestrel服务器
原文链接 Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core模板项目使用Kestrel作为默认的web服务 ...