第25章 项目6:使用CGI进行远程编辑

阅读: 评论:0

第25章  项目6:使用CGI进行远程编辑

第25章 项目6:使用CGI进行远程编辑

初次实现

25-1 i ——简单的网页编辑器

#!D:Program Files
import cgi
form = cgi.FieldStorage()

text = value('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='i' method='POST'>
<textarea rows='10' cols='20' name='text'>%s</textarea><br />
<input type='submit' />
</form>
</body>
</html>
""" % text

simple_edit.dat文件:随意输入一些即可。

将此脚本及空白的simple_edit.dat文件(没有该文件则无法运行)放在D:Program FilesApache24cgi-bin目录下

在浏览器中输入:localhost/cgi-bin/i

输出如下:

按照书上输入Nickety, nockety, noo, noo, 并提交

从页面看没什么变化,但simple_edit.dat中写入了以上内容

再次打开localhost/cgi-bin/i,页面显示如下:

且每次在查询内容中输入不同的字符,都会重新写入simple_edit.dat。

 

再次实现

将CGI脚本拆分为3个:一个带有能输入文件名的表单的网页index.html,在文本域中显示给定文件的脚本i,保存收到的文本到给定文件的脚本i。

index.html:HTML文件,包括用于输入文件名的表单

<html>
<head>
<title>File Editor</title>
</head>
<body>
<form action=&#i' method='POST'>
<b>File name:</b><br />
<input type='text' name='filename' />
<input type='submit' value='Open' />
</body>
</html>

i ——编辑器脚本

abspath函数被用于获取data目录的绝对路径,文件名保存在hidden表单元素中。会被传递到下一个脚本i中。

#!D:Program Files

print 'Content-type: text/htmln'

from os.path import join, abspath

import cgi, sys

BASE_DIR = abspath('data')

form = cgi.FieldStorage()
filename = value('filename')
if not filename:
print 'Please enter a file name'
sys.exit()
text = open(join(BASE_DIR, filename)).read()

print """
<html>
<head>
<title&</title>
</head>
<body>
<form action=&#i' 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)

密码处理——sha模块(SecureHash Algorithm,安全哈希算法)

从输入字符串中提取看似随机数据的根本上无意义字符串的一种方法。

>>> from sha import sha

>>> sha('foobar').hexdigest()

'8843d7f92416211de9ebb963ff4ce28125932878'

>>> sha('foobaz').hexdigest()

'21eb6533733a5e4763acacd1d45a60c2e0e404e1'

密码中的微小改变会输出完全不同的摘要。

 

i ——实现保存功能的脚本

处理前端提交的数据,并保存:接受一个文件名、一个密码和一些文本,并且检查密码是否正确。

#!D:Program Files

print'Content-type: text/htmln'

from os.path import join, abspath
import cgi, sha, sys

BASE_DIR = abspath('data')

form = cgi.FieldStorage()
text = value('text')
filename = value('filename')
password = value('password')

if not(filename and text and password):
print 'Invalid parameters.'
it()
if sha.sha(password).hexdigest() != '8843d7f92416211de9ebb963ff4ce28125932878':
print 'Invalid password'
it()

f = open(join(BASE_DIR, filename), 'w')
f.write(text)
f.close()

print 'The file has been saved.'

将index.html及脚本i、i放入到D:Program FilesApache24htdocs目录下,并创建data文件夹,新建空白的edit.dat文件。

在浏览器中输入:localhost或127.0.0.1即可调出 index.html。

输入edit.dat然后点击open:

密码默认为foobar,输入文本Nickety, nockety, noo, noo, ,并提交:

 

文本写入到edit.dat中:

若密码输入错误,显示如下:

若无任何密码或文本输入,显示如下:

转载于:.html

本文发布于:2024-01-31 20:20:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670361631099.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编辑   项目   CGI
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23