您的位置:首页 > 编程语言 > Ruby

Ruby和web开发

2004-11-04 17:20 393 查看
1。编写cgi

简单的cgi程序如下:

#!/usr/bin/env ruby
print "HTTP/1.0 200 OKrn"
print "Content-type: text/htmlrnrn"
print "Hello World!rn"

我们可以用ruby来处理提交的参数,填充模板,生成html等,但稍显麻烦,可以用cgi模块。

2。使用cgi.rb

cgi.rb用来编写cgi脚本,他可以操作form,cookies,环境变量,维护session等。具体用法你应该知道去哪里找吧。

3。引用和转义

/在url里是一个特殊字符,还有< 和>等,有时候需要转义(escaped),例如/被转成%2F。cgi.rb提供了两个函数,CGI.escape 和CGI.unescape:

require 'cgi'
puts CGI.escape( "Nicholas Payton/Trumpet & Flugel Horn" )

产生结果:

Nicholas+Payton%2FTrumpet+%26+Flugel+Horn

转义html文档中元素的例子(略):

4。表单 form

类cgi可以用两种方法取得客户端提交的数据。加入用户提交了lookup?player=tom&year=1958,我们可以直接用cgi[]数组访问它。

require 'cgi'
cgi = CGI.new
cgi['player'] # -> ["tom"]
cgi['year'] # -> ["1958"]

另一个办法是你用一个hash表,取得所有参数及值。

require 'cgi'
cgi = CGI.new
h = cgi.params
h['player'] # -> ["tom"]

5。产生form和html

cgi类提供了非常多的用来产生html的方法,几乎是每一个tag一个方法。还是例子来得直观:

require "cgi"
cgi = CGI.new("html3") # add HTML generation methods
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
}
}
}
}

产生如下代码:

6。cookies

require "cgi"
cookie = CGI::Cookie.new("rubyweb", "CustID=123", "Part=ABC");
cgi = CGI.new("html3")
cgi.out( "cookie" => [cookie] ){
cgi.html{
"nHTML content here"
}
}

产生的头如下:

Content-Type: text/html
Content-Length: 86
Set-Cookie: rubyweb=CustID%3D123&Part%3DABC; path=

然后,当用户再访问页面的时候,你就可以读取这个值了。

require "cgi"
cgi = CGI.new("html3")
cgi.out{
cgi.html{
cgi.pre{
cookie = cgi.cookies["rubyweb"]
"nCookies aren" + cookie.value.join("n")
}
}

7。sessions

处理session需要额外多一个类:CGI::Session

require "cgi"
require "cgi/session"

cgi = CGI.new("html3")
sess = CGI::Session.new( cgi, "session_key" => "rubyweb",
"session_id" => "9650",
"new_session" => true,
"prefix" => "web-session.")
sess["CustID"] = 123
sess["Part"] = "ABC"

cgi.out{
cgi.html{
"nHTML content here"
}
}

读取session通过如下代码:

require "cgi"
require "cgi/session"

cgi = CGI.new("html3")
sess = CGI::Session.new( cgi, "session_key" => "rubyweb",
"prefix" => "web-session.")
cgi.out{
cgi.html{
"nCustomer #{sess['CustID']} orders an #{sess['Part']}"
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: