如何创建和使用脚本创建数据库Python CGI脚本

Python Web编程-CGI & WSGIWeb 基础Web客户端和服务器之间交互的是一个基于文本的协议------HTTP,超文本传输协议。一个Web客户端打开一个到服务器的因特网连接,并请求某些内容。服务器响应所请求的内容,然后关闭连接,浏览器读取这些内容,并显示在屏幕上。Web内容可以用HTML语言来编写(HTML更像是一个排版工具),会告诉浏览器如何显示此页中的各种文本和图形对象。HTML真正的强大之处在于一个页面可以包含指针(超链接),可以指向存放在任何网页上的东西Web服务器以两种不同的方式向客户端提供:取一个磁盘文件,将其内容返回给客户端。磁盘文件称为静态内容,而返回文件到客户的过程称为服务静态内容;运行一个可执行文件,并将结果 返回给客户端。此过程称为服务动态内容;通用资源定位符URL,每条Web内容返回的内容都是与他管理的某个文件所关联的。这些文件中每一个都有唯一的名字------URL。URL标识了资源的位置。比如: 表示主机的80端口有个index.html文件。+Love服务静态内容就是HTTP最基本的功能。本篇文章关心的是服务动态内容---CGI。CGI是一个标准,以下问题:客户端如何传递参数给服务器:?分隔了文件名和参数,参数之间以&分隔,这在GET请求的URI中有显示;服务器如何将参数传递给子进程:收到GET /cgi-bin/addr?15000&23 HTTP 1.1 这样的请求后,调用fork创建子进程,将CGI环境变量QUERY_STRING设置为15000&23,并调用execve来在上下文中查找并执行/cgi-bin/addr程序。addr就被成为CGI程序,也可以被称为CGI脚本。服务器如何传递其他信息给子进程:CGI定义了大量的环境变量,一个CGI程序运行是可以设置这些变量,如图只是一部分环境变量。子进程将它的输出发送到哪里:一个CGI程序将她的动态内容发送到标准输出,在子进程加载并运行CGI程序之前,它使用UNIX dup2函数将标准书输出重定向到和客户端相关联的已连接描述符——比如浏览器。因此任何CGI程序写到标准输出的东西都会直接达到客户端。以下程序在Python下实现,Python对CGI编程有很好的支持,甚至也有自己的CGI升级版-WSGI在终端启动CGI服务器:python -m CGIHTTPServer浏览器中输入http://localhost:8000/friends.html,现实页面如下:输入相应参数Kevin Love和25后,点击提交,显示页面如下:注意Kevin与Love之间,用+分隔WSGIWSGI仍然是一个标准,是Python版的CGI。WSGI对应用程序有如下规定:应用程序是一个可调用对象;此可调用对象有两个参数;此可调用对象需返回一个值,这个值是可迭代的;Python中可调用对象是函数,实现了__call__()方法的类的实例,以及类;应用程序接收的两个参数分别为设置环境变量的environ和start_response,start_response接收两个位置参数和一个可选参数:start_response(status, response_headers, exc_infos),status表示 状态码,response_headers表示一个参数列表,exc_infos表示异常信息,WSGI对服务器有如下规定:服务器需要调用应用程序WSGI中间件是利用装饰器实现的,对应用程序而言,中间件是服务器,对服务器而言,中间件是应用程序如下代码实现了一个简单WSGI程序演示:1添加评论分享收藏文章被以下专栏收录python CGI 文件读写注意 500
时间: 12:52:37
&&&& 阅读:202
&&&& 评论:
&&&& 收藏:0
标签:cgi出现500错误 ,是由于 HTTP表头不对gi的通信依靠stdout与浏览器通信。&所以简单地在py-cgi-index.py里面写:&#!/usr/bin/env python&print ‘hello world‘&这样写是不对的。&cgi接口规定,cgi脚本输出的开头应该是http header。&而hello world这种字符无法被识别为任何有效的http header,&所以如果访问http://localhost/python-cgi,会返回500错误。&解决办法有两个:&1、写上http header。&header与body之间必须有一个空行,以识别前面的是header,后面的是body。&代码改成:&#!/usr/bin/env python&print ‘Content-Type: text/html\n\nhello world‘&2、空白http header。&不写http header的情况下,apache会自动补上header。&代码改成:&#!/usr/bin/env python&print ‘\nhello world‘&cgi要读写文件,注意一定要将该文件权限设置为666,即全部可写。本文出自 “” 博客,请务必保留此出处标签:原文地址:http://mashengwei.blog.51cto.com/4959
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!Python CGI编程 & 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。 & 网页浏览 为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程:
1、使用你的浏览器访问URL并连接到HTTP web 服务器。 2、Web服务器接收到请求信息后会解析URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。 3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。 CGI程序可以是Python脚本,PERL脚本,SHELL脚本,C或者C++程序等。 & CGI架构图
& Web服务器支持及配置 在你进行CGI编程前,确保您的Web服务器支持CGI及已经配置了CGI的处理程序。 Apache 支持CGI 配置: 设置好CGI目录: ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 所有的HTTP服务器执行CGI程序都保存在一个预先配置的目录。这个目录被称为CGI目录,并按照惯例,它被命名为/var/www/cgi-bin目录。 CGI文件的扩展名为.cgi,python也可以使用.py扩展名。 默认情况下,Linux服务器配置运行的cgi-bin目录中为/var/www。 如果你想指定其他运行CGI脚本的目录,可以修改httpd.conf配置文件,如下所示: &Directory "/var/www/cgi-bin"&&& AllowOverride None&& Options +ExecCGI&& Order allow,deny&& Allow from all&/Directory& 在 AddHandler 中添加 .py 后缀,这样我们就可以访问 .py 结尾的 python 脚本文件: AddHandler cgi-script .cgi .pl .py & 第一个CGI程序 我们使用Python创建第一个CGI程序,文件名为hellp.py,文件位于/var/www/cgi-bin目录中,内容如下,修改文件的权限为755: #coding=utf-8#!/usr/bin/python print "Content-type:text/html\r\n\r\n"print '&html&'print '&head&'print '&title&Hello Word - First CGI Program&/title&'print '&/head&'print '&body&'print '&h2&Hello Word! This is my first CGI program&/h2&'print '&/body&'print '&/html&' 以上程序在浏览器访问显示结果如下: Hello Word! This is my first CGI program 这个的hello.py脚本是一个简单的Python脚本,脚本第一行的输出内容"Content-type:text/html\r\n\r\n"发送到浏览器并告知浏览器显示的内容类型为"text/html"。 & HTTP头部 hello.py文件内容中的" Content-type:text/html\r\n\r\n"即为HTTP头部的一部分,它会发送给浏览器告诉浏览器文件的内容类型。 HTTP头部的格式如下: HTTP 字段名: 字段内容 例如Content-type: text/html\r\n\r\n 以下表格介绍了CGI程序中HTTP头部经常使用的信息:
Content-type:
请求的与实体对应的MIME信息。例如: Content-type:text/html
Expires: Date
响应过期的日期和时间
Location: URL
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Last-modified: Date
请求资源的最后修改时间
Content-length: N
请求的内容长度
Set-Cookie: String
设置Http Cookie & CGI环境变量 所有的CGI程序都接收以下的环境变量,这些变量在CGI程序中发挥了重要的作用:
CONTENT_TYPE
这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH
如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE
客户机内的 COOKIE 内容。
HTTP_USER_AGENT
提供包含了版本数或其他专有数据的客户浏览器信息。
这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
QUERY_STRING
如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号'?'分隔。
REMOTE_ADDR
这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Web服务器的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
REMOTE_HOST
这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
REQUEST_METHOD
提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
SCRIPT_FILENAME
CGI脚本的完整路径
SCRIPT_NAME
CGI脚本的的名称
SERVER_NAME
这是你的 WEB 服务器的主机名、别名或IP地址。
SERVER_SOFTWARE
这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号。例如,上面的值为Apache/2.2.14(Unix) 以下是一个简单的CGI脚本输出CGI的环境变量: #coding=utf-8#!/usr/bin/python import os print "Content-type: text/html\r\n\r\n";print "&font size=+1&Environment&/font&&\br&";for param in os.environ.keys():& print "&b&%20s&/b&: %s&\br&" % (param, os.environ[param]) Windows: #!C:\Python27\python.exe #coding=utf-8 & import os & print "Content-type: text/html\r\n\r\n"; print "&font size=+1&Environment&/font&&\br&"; for param in os.environ.keys(): & print "&b&%20s&/b&: %s&\br&" % (param, os.environ[param]) & GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法。 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 如下所示:
有关 GET 请求的其他一些注释:
GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回数据 简单的url实例:GET方法 以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数: /cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI 以下为hello_get.py文件的代码: #coding=utf-8#!/usr/bin/python # CGI处理模块import cgi, cgitb
# 创建 FieldStorage 的实例化form = cgi.FieldStorage()
# 获取数据first_name = form.getvalue('first_name')last_name& = form.getvalue('last_name') print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&"print "&title&Hello - Second CGI Program&/title&"print "&/head&"print "&body&"print "&h2&Hello %s %s&/h2&" % (first_name, last_name)print "&/body&"print "&/html&" 浏览器请求输出结果: Hello ZARA ALI 简单的表单实例:GET方法 以下是一个通过HTML的表单使用GET方法向服务器发送两个数据,提交的服务器脚本同样是hello_get.py文件,代码如下: &form action="/cgi-bin/hello_get.py" method="get"&First Name: &input type="text" name="first_name"&& &br /& Last Name: &input type="text" name="last_name" /&&input type="submit" value="Submit" /&&/form& & Windows: &form action="http://localhost:8008/cgi-bin/hello_get.py" method="get"& First Name: &input type="text" name="first_name"&& &br /& Last Name: &input type="text" name="last_name" /& &input type="submit" value="Submit" /& &/form&
& 使用POST方法传递数据 使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据。 以下同样是hello_get.py ,它也可以处理浏览器提交的POST表单数据: #coding=utf-8#!/usr/bin/python # 引入 CGI 模块 import cgi, cgitb
# 创建 FieldStorage 实例form = cgi.FieldStorage()
# 获取表单数据first_name = form.getvalue('first_name')last_name& = form.getvalue('last_name') print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&"print "&title&Hello - Second CGI Program&/title&"print "&/head&"print "&body&"print "&h2&Hello %s %s&/h2&" % (first_name, last_name)print "&/body&"print "&/html&" 以下为表单通过POST方法向服务器脚本hello_get.py提交数据: &form action="/cgi-bin/hello_get.py" method="post"&First Name: &input type="text" name="first_name"&&br /&Last Name: &input type="text" name="last_name" /& &input type="submit" value="Submit" /&&/form& & Windows: &form action="http://localhost:8008/cgi-bin/hello_get.py" method="post"& First Name: &input type="text" name="first_name"&&br /& Last Name: &input type="text" name="last_name" /& &input type="submit" value="Submit" /& &/form&
& 通过CGI程序传递checkbox数据 checkbox用于提交一个或者多个选项数据,HTML代码如下: &form action="/cgi-bin/checkbox.cgi" method="POST" target="_blank"&&input type="checkbox" name="maths" value="on" /& Maths&input type="checkbox" name="physics" value="on" /& Physics&input type="submit" value="Select Subject" /&&/form& 以下为 checkbox.cgi 文件的代码: #coding=utf-8#!/usr/bin/python # 引入 CGI 处理模块 import cgi, cgitb
# 创建 FieldStorage的实例 form = cgi.FieldStorage()
# 接收字段数据if form.getvalue('maths'):&& math_flag = "ON"else:&& math_flag = "OFF" if form.getvalue('physics'):&& physics_flag = "ON"else:&& physics_flag = "OFF" print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&"print "&title&Checkbox - Third CGI Program&/title&"print "&/head&"print "&body&"print "&h2& CheckBox Maths is : %s&/h2&" % math_flagprint "&h2& CheckBox Physics is : %s&/h2&" % physics_flagprint "&/body&"print "&/html&"
通过CGI程序传递Radio数据 Radio只向服务器传递一个数据,HTML代码如下: &form action="/cgi-bin/radiobutton.py" method="post" target="_blank"&&input type="radio" name="subject" value="maths" /& Maths&input type="radio" name="subject" value="physics" /& Physics&input type="submit" value="Select Subject" /&&/form& radiobutton.py 脚本代码如下: #coding=utf-8#!/usr/bin/python # Import modules for CGI handling import cgi, cgitb
# Create instance of FieldStorage form = cgi.FieldStorage()
# Get data from fieldsif form.getvalue('subject'):&& subject = form.getvalue('subject')else:&& subject = "Not set" print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&"print "&title&Radio - Fourth CGI Program&/title&"print "&/head&"print "&body&"print "&h2& Selected Subject is %s&/h2&" % subjectprint "&/body&"print "&/html&"
& 通过CGI程序传递 Textarea 数据 Textarea向服务器传递多行数据,HTML代码如下: &form action="/cgi-bin/textarea.py" method="post" target="_blank"&&textarea name="textcontent" cols="40" rows="4"&Type your text here...&/textarea&&input type="submit" value="Submit" /&&/form& textarea.cgi脚本代码如下: #coding=utf-8#!/usr/bin/python # Import modules for CGI handling import cgi, cgitb
# Create instance of FieldStorage form = cgi.FieldStorage()
# Get data from fieldsif form.getvalue('textcontent'):&& text_content = form.getvalue('textcontent')else:&& text_content = "Not entered" print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&";print "&title&Text Area - Fifth CGI Program&/title&"print "&/head&"print "&body&"print "&h2& Entered Text Content is %s&/h2&" % text_contentprint "&/body&"
通过CGI程序传递下拉数据 HTML下拉框代码如下: &form action="/cgi-bin/dropdown.py" method="post" target="_blank"&&select name="dropdown"&&option value="Maths" selected&Maths&/option&&option value="Physics"&Physics&/option&&/select&&input type="submit" value="Submit"/&&/form& dropdown.py 脚本代码如下所示: #coding=utf-8#!/usr/bin/python # Import modules for CGI handling import cgi, cgitb
# Create instance of FieldStorage form = cgi.FieldStorage()
# Get data from fieldsif form.getvalue('dropdown'):&& subject = form.getvalue('dropdown')else:&& subject = "Not entered" print "Content-type:text/html\r\n\r\n"print "&html&"print "&head&"print "&title&Dropdown Box - Sixth CGI Program&/title&"print "&/head&"print "&body&"print "&h2& Selected Subject is %s&/h2&" % subjectprint "&/body&"print "&/html&"
CGI中使用Cookie 在http协议一个很大的缺点就是不作用户身份的判断,这样给编程人员带来很大的不便, 而cookie功能的出现弥补了这个缺憾。 所有cookie就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie常用在密码判断中 。 cookie的语法 http cookie的发送是通过http头部来实现的,他早于文件的传递,头部set-cookie的语法如下: Set-cookie:name=expires=path=domain=secure
name=name: 需要设置cookie的值(name不能使用";"和","号),有多个name值时用";"分隔例如:name1=name1;name2=name2;name3=name3。 expires=date: cookie的有效期限,格式: expires="Wdy,DD-Mon-YYYY HH:MM:SS" path=path: 设置cookie支持的路径,如果path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如: path="/cgi-bin/",如果path是一个文件,则cookie指对这个文件生效,例如:path="/cgi-bin/cookie.cgi"。 domain=domain: 对cookie生效的域名,例如:domain="www.chinalb.com" secure: 如果给出此标志,表示cookie只能通过SSL协议的https服务器来传递。 cookie的接收是通过设置环境变量HTTP_COOKIE来实现的,CGI程序可以通过检索该变量获取cookie信息。 & Cookie设置 Cookie的设置非常简单,cookie会在http头部单独发送。以下实例在cookie中设置了UserID 和 Password: &pre&#coding=utf-8#!/usr/bin/python print "Set-Cookie:UserID=XYZ;\r\n"print "Set-Cookie:Password=XYZ123;\r\n"print "Set-Cookie:Expires=Tuesday, 31-Dec-:40 GMT";\r\n"print "Set-Cookie:Domain=www.w3cschool.\r\n"print "Set-Cookie:Path=/\n"print "Content-type:text/html\r\n\r\n"...........Rest of the HTML Content.... 以上实例使用了 Set-Cookie 头信息来设置Cookie信息,可选项中设置了Cookie的其他属性,如过期时间Expires,域名Domain,路径Path。这些信息设置在 "Content-type:text/html\r\n\r\n"之前。 & 检索Cookie信息 Cookie信息检索页非常简单,Cookie信息存储在CGI的环境变量HTTP_COOKIE中,存储格式如下: key1=value1;key2=value2;key3=value3.... 以下是一个简单的CGI检索cookie信息的程序: #coding=utf-8#!/usr/bin/python # Import modules for CGI handling from os import environimport cgi, cgitb if environ.has_key('HTTP_COOKIE'):&& for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):&&&&& (key, value ) = split(cookie, '=');&&&&& if key == "UserID":&&&&&&&& user_id = value if key == "Password":&&&&&&&& password = value print "User ID& = %s" % user_idprint "Password = %s" % password 以上脚本输出结果如下: User ID = XYZPassword = XYZ123 文件上传实例: HTML设置上传文件的表单需要设置enctype 属性为multipart/form-data,代码如下所示: &html&&body&&& &form enctype="multipart/form-data"&&&&&&&&&&&&&&&&&&&&&& action="save_file.py" method="post"&&& &p&File: &input type="file" name="filename" /&&/p&&& &p&&input type="submit" value="Upload" /&&/p&&& &/form&&/body&&/html& save_file.py脚本文件代码如下: #coding=utf-8#!/usr/bin/python import cgi, os cgitb.enable() form = cgi.FieldStorage() # 获取文件名fileitem = form['filename'] # 检测文件是否上传if fileitem.filename:&& # 设置文件路径 && fn = os.path.basename(fileitem.filename)&& open('/tmp/' + fn, 'wb').write(fileitem.file.read()) message = 'The file "' + fn + '" was uploaded successfully'&& else:&& message = 'No file was uploaded'&& print """\Content-Type: text/html\n&html&&body&&& &p&%s&/p&&/body&&/html&""" % (message,) 如果你使用的系统是Unix/Linux,你必须替换文件分隔符,在window下只需要使用open()语句即可: fn = os.path.basename(fileitem.filename.replace("\\", "/" )) & 文件下载对话框 如果我们需要为用户提供文件下载链接,并在用户点击链接后弹出文件下载对话框,我们通过设置HTTP头信息来实现这些功能,功能代码如下: #coding=utf-8#!/usr/bin/python # HTTP Headerprint "Content-Type:application/octet- name=\"FileName\"\r\n";print "Content-Disposition: filename=\"FileName\"\r\n\n"; # Actual File Content will go hear.fo = open("foo.txt", "rb") str = fo.read();print str # Close opend filefo.close()
阅读(...) 评论()如何创建和使用Python CGI脚本_百度知道
如何创建和使用Python CGI脚本
我有更好的答案
CGI格式文件怎么打开  CGI格式文件是“公共网关接口脚本”类型文件,可理解是一个可执行的脚本。可以使用Python、Perl、Ruby等语言进行创建。CGI脚本通常用于运行基本的Web脚本,比如在Web窗口中发送电子邮件等。  CGI格式文件它是一种常见的代码文件,正如您所了解的代码文件都记文本格式的,这意味着打开CGI格式文件的方法有很多。无论您使用的是Windows、Mac OS X、Linux,都可使使用系统里面都自带的文本编辑器来打开及编辑CGI文件,您所需要做的只是双击它即可。
采纳率:64%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。记得一开始接触web开发的时候,看视频,视频里面的老师一般都会语重心长的说:想当年我们一开始学习编程那会儿,都是用cgi编程,复杂的很,现在你们学习web编程,直接有现成的框架来用,十分简单。记得当然听完这句话之后就会觉得这个老师好有经验,技术很高。
不过后来慢慢的接触web编程时间长了,觉得cgi编程并不是像传说中的那么难,只不过是比较麻烦,在后台使用html硬编码来完成(也就是在后台使用类似print的语句输出html)。通过浏览器直接访问cgi文件,由web服务器执行cgi脚本,输出内容到浏览器。关于cgi的更多内容可以参考这里:
再来看这个python中的cgi,确实很简单。但是有一点我不确定,就是如果我是初学web编程的话,会不会觉得这个简单,这个角度的思考确实不好操作。
下面直接上代码吧,和书上的不太一样,因为书上的代码在我的电脑上不能正常运行。 首先是index.html:
&title&File Editor&/title&
&form action='/test/cgi-bin/edit.cgi' method='POST'&
&b&File name:&/b&&br/&
&input type='text' name='filename'/&
&input type='submit' value='Open'/&
12345678910111213
&html&&&&&&&&&&head&&&&&&&&&&&&&&&&&&title&File Editor&/title&&&&&&&&&&/head&&&&&&&&&&body&&&&&&&&&&&&&&&&&&form action='/test/cgi-bin/edit.cgi' method='POST'&&&&&&&&&&&&&&&&&&&&&&&&&&b&File name:&/b&&br/&&&&&&&&&&&&&&&&&&&&&&&&&&input type='text' name='filename'/&&&&&&&&&&&&&&&&&&&&&&&&&&input type='submit' value='Open'/&&&&&&&&&&&&&&&&&&/form&&&&&&&&&&/body&&/html&&
edit.cgi,用来接受index页面的名字,然后根据名字查找文件,并且输出。
#!usr/bin/env python
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()
text = open(join(BASE_DIR,filename)).read()
except Exception,data:
print str(data)
&title&Editing...&/title&
&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' /&
""" % (filename, filename, text)
12345678910111213141516171819202122232425262728293031323334353637383940
#!usr/bin/env python&print 'Content-type: text/html\n'&from os.path import join, abspathimport 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)&
最后一个文件save.cgi:
#!/usr/bin/env python
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() != '16211de9ebb963ff4ce':
print 'Invalid password'
sys.exit()
f = open(join(BASE_DIR,filename), 'w')
f.write(text)
print 'The file has been saved.'
1234567891011121314151617181920212223242526272829
#!/usr/bin/env python&print 'Content-type: text/html\n'&from os.path import join, abspathimport 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() != '16211de9ebb963ff4ce':&&&&&&&&print 'Invalid password'&&&&&&&&sys.exit()&f = open(join(BASE_DIR,filename), 'w')f.write(text)f.close()&print 'The file has been saved.'&
代码理解上比较简单,唯一麻烦的地方是web服务器的配置。我这里使用的是tomcat来做web服务器。需要修改tomcat配置,首先是配置cgi,我引用一段从网上搜来的文字:
要为Tomcat配置CGI服务主要有下面几个步骤:
把servlets-cgi.renametojar (在%CATALINA_HOME%/server/lib/目录下)改名为servlets-cgi.jar。
在Tomcat的%CATALINA_BASE%/conf/web.xml 文件中,把关于&servlet-name& CGI的那段的注释去掉。内容样式如下:
cgiorg.apache.catalina.servlets.CGIServletdebug0cgiPathPrefixWEB-INF/cgiexecutable/usr/bin/python #the5fire注释,这里要改成自己的python执行路径。 5
其中参数executable需要自已添加进去,它的值就是我们用来解释CGI脚本的程序。一般情况下这里会配置为Perl。"C:/Perl/bin/"为Perl的安装目录。
在Tomcat的%CATALINA_BASE%/conf/web.xml文件中,把关于对CGI进行映射的那段的注释去掉。内容样式如下:
cgi/cgi-bin/*
其中url-pattern就是将来我们访问CGI脚本的url地址模式。
完成上面三个步骤后,我们的Tomcat服务器就具有了运行CGI脚本的能力了。
使用hello.cgi测试一下:
#!usr/bin/env python
print 'Content-type:text/plain'
print 'Hello World!
#!usr/bin/env python&print 'Content-type:text/plain'printprint 'Hello World!&
然后测试能运行的话,就要把代码放到tomcat的webapp下的某一个app下的WEB-INF中的cgi下。,比如我这里的cgi文件是在tomcat/webapps/test/WEB-INF/cgi/下。另外在cgi目录下要建立一个data文件夹,里面放一个test.txt文件。
最后执行效果如图:
你或许也喜欢}

我要回帖

更多关于 使用脚本创建数据库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信