Ruby和web开发

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']}"
    }
  }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值