Ứng dụng web Ruby - Lập trình CGI

Ruby là một ngôn ngữ có mục đích chung; nó hoàn toàn không thể được gọi là một ngôn ngữ web . Mặc dù vậy, các ứng dụng web và công cụ web nói chung là một trong những ứng dụng phổ biến nhất của Ruby.

Bạn không chỉ có thể viết máy chủ SMTP, FTP daemon hoặc máy chủ Web của riêng mình bằng Ruby mà còn có thể sử dụng Ruby cho các tác vụ thông thường hơn như lập trình CGI hoặc thay thế cho PHP.

Vui lòng dành vài phút với Hướng dẫn lập trình CGI để biết thêm chi tiết về Lập trình CGI.

Viết kịch bản CGI

Tập lệnh Ruby CGI cơ bản nhất trông như thế này -

#!/usr/bin/ruby

puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

Nếu bạn gọi tập lệnh này là test.cgi và tải nó lên một nhà cung cấp dịch vụ lưu trữ Web dựa trên Unix với các quyền phù hợp, bạn có thể sử dụng nó làm tập lệnh CGI.

Ví dụ, nếu bạn có trang Web https://www.example.com/được lưu trữ bằng nhà cung cấp dịch vụ lưu trữ Web Linux và bạn tải test.cgi lên thư mục chính và cấp cho nó quyền thực thi, sau đó truy cậphttps://www.example.com/test.cgi sẽ trả về một trang HTML nói rằng This is a test.

Ở đây khi test.cgi được yêu cầu từ trình duyệt Web, máy chủ Web sẽ tìm test.cgi trên trang Web, sau đó thực thi nó bằng trình thông dịch Ruby. Tập lệnh Ruby trả về một tiêu đề HTTP cơ bản và sau đó trả về một tài liệu HTML cơ bản.

Sử dụng cgi.rb

Ruby đi kèm với một thư viện đặc biệt có tên là cgi cho phép các tương tác phức tạp hơn những tương tác có tập lệnh CGI trước đó.

Hãy tạo một tập lệnh CGI cơ bản sử dụng cgi -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

puts cgi.header
puts "<html><body>This is a test</body></html>"

Ở đây, bạn đã tạo một đối tượng CGI và sử dụng nó để in dòng tiêu đề cho bạn.

Xử lý biểu mẫu

Sử dụng lớp CGI cho phép bạn truy cập vào các tham số truy vấn HTML theo hai cách. Giả sử chúng ta được cung cấp một URL /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

Bạn có thể truy cập trực tiếp các tham số FirstNameLastName bằng CGI # [] như sau:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

Có một cách khác để truy cập các biến biểu mẫu này. Mã này sẽ cung cấp cho bạn một hàm băm của tất cả các khóa và giá trị -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

Sau đây là mã để lấy tất cả các khóa -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

Nếu một biểu mẫu chứa nhiều trường có cùng tên, các giá trị tương ứng sẽ được trả về tập lệnh dưới dạng một mảng. Accessor [] chỉ trả về kết quả đầu tiên trong số this.index là kết quả của phương thức params để lấy tất cả chúng.

Trong ví dụ này, giả sử biểu mẫu có ba trường được gọi là "tên" và chúng tôi đã nhập ba tên "Zara", "Huma" và "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"]}

Note- Ruby sẽ tự động xử lý các phương thức GET và POST. Không có cách điều trị riêng biệt cho hai phương pháp khác nhau này.

Một biểu mẫu được liên kết, nhưng cơ bản, có thể gửi dữ liệu chính xác sẽ có mã HTML như vậy -

<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>

Tạo biểu mẫu và HTML

CGI chứa một số lượng lớn các phương pháp được sử dụng để tạo HTML. Bạn sẽ tìm thấy một phương pháp cho mỗi thẻ. Để kích hoạt các phương pháp này, bạn phải tạo một đối tượng CGI bằng cách gọi CGI.new.

Để làm cho việc lồng thẻ dễ dàng hơn, các phương pháp này lấy nội dung của chúng dưới dạng các khối mã. Các khối mã phải trả về một Chuỗi , chuỗi này sẽ được sử dụng làm nội dung cho thẻ. Ví dụ -

#!/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
         }
      }
   }
}

NOTE- Phương thức biểu mẫu của lớp CGI có thể chấp nhận một tham số phương thức, tham số này sẽ thiết lập phương thức HTTP (GET, POST, v.v.) được sử dụng trên biểu mẫu đệ trình. Mặc định, được sử dụng trong ví dụ này, là POST.

Điều này sẽ tạo ra kết quả sau:

Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<HTML>
   <HEAD>
      <TITLE>This Is a Test</TITLE>
   </HEAD>
   <BODY>
      <FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
         <HR>
         <H1>A Form: </H1>
         <TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
         <BR>
         <INPUT TYPE = "submit">
      </FORM>
   </BODY>
</HTML>

Trích dẫn chuỗi

Khi xử lý URL và mã HTML, bạn phải cẩn thận trích dẫn các ký tự nhất định. Ví dụ: một ký tự gạch chéo (/) có ý nghĩa đặc biệt trong một URL, vì vậy nó phải làescaped nếu nó không phải là một phần của tên đường dẫn.

Ví dụ: bất kỳ / trong phần truy vấn của URL sẽ được dịch sang chuỗi% 2F và phải được dịch ngược lại thành a / để bạn sử dụng. Dấu cách và dấu và cũng là các ký tự đặc biệt. Để xử lý điều này, CGI cung cấp các quy trìnhCGI.escapeCGI.unescape.

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

Điều này sẽ tạo ra kết quả sau:

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

Điều này sẽ tạo ra kết quả sau:

&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

Các phương pháp hữu ích trong lớp CGI

Đây là danh sách các phương thức liên quan đến lớp CGI -

  • Các của Ruby CGI - Phương pháp liên quan đến thư viện chuẩn CGI.

Cookie và phiên

Chúng tôi đã giải thích hai khái niệm này trong các phần khác nhau. Mời các bạn theo dõi các phần -

  • Các của Ruby CGI Cookies - Làm thế nào để xử lý Cookies CGI.

  • Các phiên CGI của Ruby - Cách quản lý các phiên CGI.

Máy chủ lưu trữ web

Bạn có thể kiểm tra chủ đề sau trên internet để lưu trữ trang web của mình trên Máy chủ dựa trên Unix -

  • Lưu trữ web dựa trên Unix