简单介绍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的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
python在不同层级目录import模块的方法
Jan 31 Python
Python的requests网络编程包使用教程
Jul 11 Python
使用Python对Excel进行读写操作
Mar 30 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python原始套接字编程实例解析
Jan 29 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
教你使用pyinstaller打包Python教程
May 27 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
PHP addslashes()函数讲解
2019/02/03 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
Python import用法以及与from...import的区别
2015/05/28 Python
python 编写简单网页服务器的实例
2018/06/01 Python
django2.0扩展用户字段示例
2019/02/13 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
python中的数据结构比较
2019/05/13 Python
Python远程方法调用实现过程解析
2020/07/28 Python
python用Configobj模块读取配置文件
2020/09/26 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
初中班级口号
2014/06/09 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫