📜  Ruby Web应用程序-CGI编程(1)

📅  最后修改于: 2023-12-03 15:04:56.895000             🧑  作者: Mango

Ruby Web应用程序-CGI编程

CGI (Common Gateway Interface) 是一种用于 Web 服务器和其他程序"对话"的标准接口。在 Ruby 中,我们可以通过使用标准库中的 cgi 模块轻松地使用 CGI 编程。

创建一个简单的 CGI 脚本

以下是一个简单的 CGI 脚本示例:

#!/usr/bin/env ruby

require "cgi"

cgi = CGI.new("html4")

cgi.out do
  cgi.html do
    cgi.head do
      cgi.title { "Hello, World!" }
    end +
    cgi.body do
      cgi.h1 { "Hello, World!" } +
      cgi.p { "This is a simple CGI program written in Ruby." }
    end
  end
end

这个脚本将生成一个包含标题和一些文本的 HTML 页面。

我们首先使用 require 引入了 cgi 模块,然后创建了一个 CGI 对象。我们将参数 "html4" 传递给 CGI.new,表示我们要生成 HTML 4.0 标准的文档类型声明。

接下来,我们使用 CGI.out 方法来生成输出。这个方法接受一个块,并将代码片段插入到 HTML 页面的正文中。

在块中,我们首先使用 cgi.html 方法生成了一个 HTML 根元素。然后,我们使用 cgi.head 方法来生成头部元素,并在其中创建了一个标题。最后,我们使用 cgi.body 方法来生成正文元素,并在其中创建了一个标题和一个段落。

在这个示例中,我们使用了 Ruby 中的代码块来生成 HTML 片段。这个技术称为“嵌套程式码(embedded code)”,它使我们可以在 Ruby 代码中嵌入 HTML 片段,并将它们合并成一个单一的输出。

传递参数

CGI 编程的一个常见用例是从 Web 表单中接收用户输入。在 Ruby 中,我们可以使用 CGI 对象的 params 属性来访问表单数据。

以下是一个示例脚本,它从用户输入中接收一个名字,并将其展示在屏幕上:

#!/usr/bin/env ruby

require "cgi"

cgi = CGI.new

name = cgi.params["name"].first

cgi.out do
  cgi.html do
    cgi.head do
      cgi.title { "Hello, #{name}!" }
    end +
    cgi.body do
      cgi.h1 { "Hello, #{name}!" } +
      cgi.p { "Welcome to our website." }
    end
  end
end

在这个脚本中,我们首先创建了一个 CGI 对象。然后,我们使用 cgi.params 属性获取了名为 "name" 的参数的值。由于 params 返回一个数组,我们需要使用 first 方法来访问数组中的第一个元素。

接下来,我们生成了一个包含用户输入的标题的 HTML 页面。

生成动态内容

最后,我们来看一个生成动态内容的示例 CGI 脚本。在这个脚本中,我们首先定义了一个简单的计算函数,它接受两个参数并返回它们的和。

然后,我们使用 CGI 对象的 params 属性从 Web 表单中获取这两个参数。我们将它们转换为整数,并传递给计算函数。

最后,我们生成一个包含结果的 HTML 页面。

#!/usr/bin/env ruby

require "cgi"

def calculate_sum(a, b)
  a.to_i + b.to_i
end

cgi = CGI.new

a = cgi.params["a"].first
b = cgi.params["b"].first

sum = calculate_sum(a, b)

cgi.out do
  cgi.html do
    cgi.head do
      cgi.title { "Sum Calculator" }
    end +
    cgi.body do
      cgi.h1 { "Sum Calculator" } +
      cgi.form("method" => "post") do
        cgi.p { "Enter two numbers:" } +
        cgi.input("type" => "text", "name" => "a", "value" => a) +
        cgi.input("type" => "text", "name" => "b", "value" => b) +
        cgi.input("type" => "submit", "value" => "Calculate") +
      end +
      cgi.p { "The sum of #{a} and #{b} is #{sum}." }
    end
  end
end

在这个脚本中,我们首先定义了一个名为 calculate_sum 的计算函数,它接受两个参数并返回它们的和。

然后,我们使用 CGI 对象的 params 属性获取名为 "a" 和 "b" 的参数,并将它们转换为整数。我们将它们传递给计算函数,并保存结果。

接下来,我们生成一个包含 Web 表单的 HTML 页面,并在其中包含两个输入字段和一个提交按钮。当用户点击按钮时,表单将被提交,并计算函数将使用输入值重新计算总和。我们将结果显示在页面中。

结论

在 Ruby 中,使用 CGI 编程可以轻松地创建动态 Web 应用程序。在我们的代码示例中,我们演示了如何创建一个简单的 CGI 脚本、传递参数以及生成动态内容。使用这些技巧,你可以开始编写自己的 Ruby CGI 程序并扩展它们的功能。