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"