python 使用CGI进行远程编辑1

来源:互联网 发布:拍摄淘宝图片技巧 编辑:程序博客网 时间:2024/05/20 18:20
 

CGI (Common Gateway Interface)通用网关接口 
CGI是网络服务器可以将查询(一般来说是通过Web表单),
传递到专门的程序(比如python程序)并且在网页上显示结果的标准机制。
它是创建web应用的程序的一种简便方法,无需编写特殊用途的应用服务器。


CGI是如何工作的
1浏览器通过url连接到HHTP web服务器
2web服务器接收到请求信息后会解析url,并查找访问的文件在服务器上是否存在,
如果存在返回文件内容,否则返回错误信息
3浏览器从服务器上接收信息,并显示接收的文件或者错误信息
CGI程序可以是Python脚本,PERL脚本,SHELL脚本,C或者C++程序等
-------------------------------------------------------------------------------------


几个报错的原因 Internal Server Error


1 pound bang
必须在脚本文件第一行声明所使用的cgi程序路径 
#!/usr/bin/env python 或者使用全路径 #!/usr/bin/python


2 cgi程序的权限不是755。 需要读写的文件的文件需 777权限全局可操作
3 如果还是不行,可能就是有些看不到的东西出错了,即行以\r\n结尾而不是以\n结尾的服务器就会读不懂。
("\r\n" 是网络协议中通用的行终止符)


4 Internal Server Error,查看Apache的error_log错误日志能得到详细的错误的信息
5 使用 cgitb模块调试。
有时候编程的错误会让程序因为没有捕捉的异常而已栈跟踪终止,
当通过cgi运行程序时,这种情况很有可能会得到有服务器返回的无帮助的错误信息。
cgitb(用途cgi回溯)的模块 导入它并且调用它的enable函数,
就能得到包含出错信息的十分有用的网页


---------------------------------------
Python CGIHTTPServer服务器
sudo python -m CGIHTTPServer 8080


http://127.0.0.1:8000/ 浏览器执行
如果当前文件夹有index.html文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。这样已经实现了最基本的文件分享的目的
http://localhost:8080/CgiSource/index.html
====================================================
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
python -m SimpleHTTPServer 80
后面的80端口是可选的,不填会采用缺省端口8000
注意,这会将当前所在的文件夹设置为默认的Web目录
http://www.jb51.net/article/81758.htm
https://docs.python.org/2/library/simplehttpserver.html


---------------------------------------------------------------------------------------

#!/usr/bin/python
#-*-coding:UTF-8-*-


#python25 使用cgi进行远程编辑 25-1 简单的网页编辑器




import cgi


form = cgi.FieldStorage()


text = form.getvalue('sometext', open('simple_edit.dat').read())
#当通过Web服务器访问页面时,CGI脚本会检查名为text的输入值,
#如果这个值被提交了,那么文本会被写道simple_edit.dat文件中,这三行也可以放在最后
f = open(filepath, 'w')
f.write(text)
f.close()




#第一行是必需的。告诉浏览器显示的内容类型为text/html,然后输出空行告诉服务器结束头部信息
print("""Content-type: text/html


<html>
<head>
<meta charset='utf-8'>
<title>A Simple Editor</title>
</head>
<body>
<form action='cgi253.cgi' method='POST'>
<textarea rows='30' cols='60' name='sometext'>%s</textarea><br />
<input type='submit' />
</form>
</body>
</html>
""" % text)







-------------------------------------------------------------------
<meta charset='utf-8'> 输入汉字不乱码
把需要读取和写入的文件权限改为 777全局可操作, 755会报错


输入是通过HTML表单提供给CGI脚本的键值对或称字段。
可以使用cgi模块的FieldStorage类从cgi脚本中获取这些字段
当创建FieldStorage实例时(应该只创建一个),它会从请求中获取变量(或字段)
然后通过类字典接口将他们提供给程序。
somename = form.getvalue('name', 'unknown')
如果不提供默认值 'unknown'的话,就会将None作为默认值
使用cgi的post方法代替get方法(提交大量数据时使用post方法)
使用数据文件作为text的默认值, 将文本保存到数据文件中,打印表单,将文本显示在文本域中textarea 


当通过web服务器访问页面时,cgi脚本会检查名为text的输入值,
默认值是文本当前内容, 在文本域textarea中显示
如果这个值被提交了,那么文本会被写到simple_edit.dat文件中,
最终修改和提交的后的文本也会显示在网页中


0 0
原创粉丝点击