Ruby Web Uygulamaları - CGI Programlama

Ruby genel amaçlı bir dildir; düzgün bir şekilde web dili olarak adlandırılamaz . Yine de, genel olarak web uygulamaları ve web araçları Ruby'nin en yaygın kullanımları arasındadır.

Ruby'de yalnızca kendi SMTP sunucunuzu, FTP arka plan programınızı veya Web sunucunuzu yazmakla kalmaz, aynı zamanda Ruby'yi CGI programlama veya PHP'nin yerine geçme gibi daha genel görevler için de kullanabilirsiniz.

CGI Programlama hakkında daha fazla ayrıntı için lütfen CGI Programlama Eğitimi ile birkaç dakika geçirin .

CGI Komut Dosyaları Yazma

En basit Ruby CGI betiği şuna benzer -

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

Bu betiği test.cgi olarak adlandırırsanız ve doğru izinlere sahip Unix tabanlı bir Web barındırma sağlayıcısına yüklediyseniz, onu bir CGI betiği olarak kullanabilirsiniz.

Örneğin, Web siteniz varsa https://www.example.com/bir Linux Web barındırma sağlayıcısında barındırılır ve test.cgi'yi ana dizine yükler ve yürütme izinleri verirsiniz, ardından ziyaret edinhttps://www.example.com/test.cgi yazan bir HTML sayfası döndürmelidir This is a test.

Burada bir Web tarayıcısından test.cgi istendiğinde, Web sunucusu Web sitesinde test.cgi'yi arar ve ardından bunu Ruby yorumlayıcısını kullanarak yürütür. Ruby betiği, temel bir HTTP başlığı döndürür ve ardından temel bir HTML belgesi döndürür.

Cgi.rb kullanma

Ruby, adında özel bir kitaplıkla birlikte gelir cgi bu, önceki CGI betiği ile olanlardan daha karmaşık etkileşimler sağlar.

Cgi kullanan temel bir CGI betiği oluşturalım -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

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

Burada bir CGI nesnesi oluşturdunuz ve bunu sizin için başlık satırını yazdırmak için kullandınız.

Form İşleme

CGI sınıfını kullanmak, HTML sorgu parametrelerine iki şekilde erişmenizi sağlar. Bize /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali'nin bir URL'sinin verildiğini varsayalım.

FirstName ve LastName parametrelerine CGI # [] kullanarak aşağıdaki gibi doğrudan erişebilirsiniz -

#!/usr/bin/ruby

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

Bu form değişkenlerine erişmenin başka bir yolu var. Bu kod size tüm anahtar ve değerlerin bir karmasını verecektir -

#!/usr/bin/ruby

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

Tüm anahtarları almak için kod aşağıdadır -

#!/usr/bin/ruby

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

Bir form aynı ada sahip birden çok alan içeriyorsa, karşılık gelen değerler koda bir dizi olarak döndürülür. [] Erişimcisi, hepsini almak için these.index'in yalnızca ilkini params yönteminin sonucunu döndürür.

Bu örnekte, formda "ad" adlı üç alan olduğunu ve "Zara", "Huma" ve "Nuha" adlı üç ad girdiğimizi varsayalım -

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

NoteRuby, GET ve POST yöntemleriyle otomatik olarak ilgilenecektir. Bu iki farklı yöntemin ayrı bir tedavisi yoktur.

Doğru verileri gönderebilen ilişkili, ancak temel bir form, şu şekilde HTML koduna sahip olacaktır:

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

Formlar ve HTML Oluşturma

CGI, HTML oluşturmak için kullanılan çok sayıda yöntem içerir. Etiket başına bir yöntem bulacaksınız. Bu yöntemleri etkinleştirmek için, CGI.new'i çağırarak bir CGI nesnesi oluşturmanız gerekir.

Etiket yerleştirmeyi kolaylaştırmak için, bu yöntemler içeriklerini kod blokları olarak alır. Kod blokları , etiketin içeriği olarak kullanılacak bir Dize döndürmelidir . Örneğin -

#!/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- CGI sınıfının form yöntemi, form gönderimi sırasında kullanılacak HTTP yöntemini (GET, POST, vb.) Ayarlayacak bir yöntem parametresini kabul edebilir. Bu örnekte kullanılan varsayılan POST'tur.

Bu, aşağıdaki sonucu verecektir -

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>

Dizeleri Alıntılamak

URL'ler ve HTML kodu ile uğraşırken, belirli karakterleri alıntılamaya dikkat etmelisiniz. Örneğin, eğik çizgi karakteri (/) bir URL'de özel bir anlama sahiptir, bu nedenleescaped yol adının bir parçası değilse.

Örneğin, URL’nin sorgu kısmındaki herhangi bir /,% 2F dizesine çevrilir ve kullanmanız için /’ye geri çevrilmesi gerekir. Boşluk ve ve işareti de özel karakterlerdir. Bunu halletmek için, CGI rutinleri sağlarCGI.escape ve CGI.unescape.

#!/usr/bin/ruby

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

Bu, aşağıdaki sonucu verecektir -

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

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

Bu, aşağıdaki sonucu verecektir -

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

CGI Sınıfında Kullanışlı Yöntemler

İşte CGI sınıfıyla ilgili yöntemlerin listesi -

  • Yakut CGI - Standart CGI kütüphaneye ilişkin yöntemler.

Çerezler ve Oturumlar

Bu iki kavramı farklı bölümlerde açıkladık. Lütfen bölümleri takip edin -

  • Yakut CGI Çerezler - CGI Çerezler nasıl baş edilir.

  • Yakut CGI Sessions - CGI oturumları yönetmek için.

Web Hosting Sunucuları

Web sitenizi Unix tabanlı bir Sunucuda barındırmak için internette aşağıdaki konuyu kontrol edebilirsiniz -

  • Unix tabanlı web barındırma