简单介绍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的Tornado框架的HTTP客户端的教程
Apr 24 Python
详解python的数字类型变量与其方法
Nov 20 Python
python基础教程之Filter使用方法
Jan 17 Python
使用Scrapy爬取动态数据
Oct 21 Python
Django2.1.3 中间件使用详解
Nov 26 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
深入解析神经网络从原理到实现
Jul 26 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
python with语句的原理与用法详解
Mar 30 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
理解深度学习之深度学习简介
Apr 14 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
vue+moment实现倒计时效果
2019/08/26 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
用python实现的线程池实例代码
2018/01/06 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
百日安全活动总结
2014/05/04 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
警示教育片观后感
2015/06/17 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
教师节简报
2015/07/20 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏