简单介绍Ruby中的CGI编程


Posted in Python onApril 10, 2015

Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的。

使用Ruby您不仅可以编写自己的SMTP服务器,FTP程序,或Ruby Web服务器,而且还可以使用Ruby进行CGI编程。

接下来,让我们花点时间来学校Ruby的CGI编辑。
编写 CGI 脚本

最脚本的 Ruby CGI 代码如下所示:

#!/usr/bin/ruby puts "HTTP/1.0 200 OK" puts "Content-type: text/html\n\n" puts "This is a test"

你可以将该代码保持到 test.cgi 文件中,上次到服务器并赋予足够权限,即可作为 CGI 脚本执行。

如果你站的的地址为http://www.example.com/ ,即可用过http://www.example.com/test.cgi 访问该程序,输出结果为: "This is a test."。

浏览器访问该网址后,Web 服务器会在站点目录下找到 test.cgi文件,然后通过Ruby解析器来解析脚本代码并访问HTML文档。
使用 cgi.rb

Ruby 可以调用 CGI 库来编写更复杂的CGI脚本。

以下代码调用了 CGI 库来创建一个脚本的CGI脚本。

#!/usr/bin/ruby
 
require 'cgi'
 
cgi = CGI.new
puts cgi.header
puts "<html><body>This is a test</body></html>"

以下代码中,创建了CGI 对象并打印头部信息。
表单处理

使用CGI库可以通过两种方式获取表单提交(或URL中的参数)的数据, 例如URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。

你可以使用 CGI#[] 来直接获取参数FirstName和LastName:

#!/usr/bin/ruby
 
require 'cgi'
cgi = CGI.new
cgi['FirstName'] # => ["Zara"]
cgi['LastName'] # => ["Ali"]

另外一种获取表单数据的方法:

#!/usr/bin/ruby
 
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName']  # => ["Ali"]

以下代码用于检索所有的键值:

#!/usr/bin/ruby
 
require 'cgi'
cgi = CGI.new
cgi.keys     # => ["FirstName", "LastName"]

如果表单包含了多个相同名称的字段,则该相同字段的值将保存在数组中。

以下实例中,指定表单中三个相同的字段"name",值分别为 "Zara", "Huma" 和 "Nuha":

#!/usr/bin/ruby
 
require 'cgi'
cgi = CGI.new
cgi['name']    # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys      # => ["name"]
cgi.params     # => {"name"=>["Zara", "Huma", "Nuha"]}

注意:Ruby 会自动判断 GET 和 POST 方法,所以无需对两种方法区别对待。

以下是相关的HML代码:

<html>
<body>
<form method="POST" action="http://www.example.com/test.cgi">
First Name :<input type="text" name="FirstName" value="" />
<br />
Last Name :<input type="text" name="LastName" value="" />
 
<input type="submit" value="Submit Data" />
</form>
</body>
</html>

创建 Form 表单和 HTML

CGI 包含了大量的方法来创建 HTML,每个HTML标签都有相对应的方法。 在使用这些方法前,比必须通过 CGI.new 来创建 CGI 对象。

为了使标签的嵌套更加的简单,这些方法将内容作为了代码块,代码块将返回字符串作为标签的内容。如下所示:

#!/usr/bin/ruby
 
require "cgi"
cgi = CGI.new("html4")
cgi.out{
  cgi.html{
   cgi.head{ "\n"+cgi.title{"This Is a Test"} } +
   cgi.body{ "\n"+
     cgi.form{"\n"+
      cgi.hr +
      cgi.h1 { "A Form: " } + "\n"+
      cgi.textarea("get_text") +"\n"+
      cgi.br +
      cgi.submit
     }
   }
  }
}

字符串转义

当你在处理 URL 中的参数或者 HTML 表单数据时,需要对指定的特殊字符进行转义,如:引号("),反斜杠(/)。

Ruby CGI 对象提供了CGI.escape 和 CGI.unescape 方法来处理这些特殊字符的转义:

#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

以上代码执行结果如下:

#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

另一组实例:

#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

以上代码执行结果如下:

<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Python 相关文章推荐
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
python连接MySQL数据库实例分析
May 12 Python
Python实现购物程序思路及代码
Jul 24 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
Python celery原理及运行流程解析
Jun 13 Python
Python ellipsis 的用法详解
Nov 20 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
python实现学员管理系统(面向对象版)
Jun 05 Python
详细介绍Ruby中的正则表达式
Apr 10 #Python
对于Python的Django框架部署的一些建议
Apr 09 #Python
Python线程中对join方法的运用的教程
Apr 09 #Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 #Python
详解Python中的正则表达式的用法
Apr 09 #Python
Python中几种操作字符串的方法的介绍
Apr 09 #Python
详解Python中的__new__()方法的使用
Apr 09 #Python
You might like
如何做到多笔资料的同步
2006/10/09 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
python修改文件内容的3种方法详解
2019/11/15 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
安全教育心得体会
2013/12/29 职场文书
音乐教学案例
2014/01/30 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
公司活动方案范文
2014/03/06 职场文书
捐助倡议书范文
2014/04/15 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
影子教师研修方案
2014/06/14 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
2014小学年度工作总结
2014/12/20 职场文书
布达拉宫导游词
2015/02/02 职场文书
对学校的意见和建议
2015/06/04 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书