Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
# "<B>This is how you make text bold</B>"
puts CGI.unescapeHTML(translated)
# Печатается "<B>This is how you make text bold</B>"
19.1.2. Вывод и обработка форм
Наиболее распространенный способ взаимодействия с CGI-программой — форма. HTML-формы создаются с помощью специальных тегов, которые браузер представляет в виде элементов ввода данных. Подробное их обсуждение выходит за рамки данной книги, но существует немало книг и онлайновых руководств по этому предмету.
В классе
CGI
require "cgi"
def reverse_ramblings(ramblings)
if ramblings[0] == nil then return " " end
chunks = ramblings[0].split(/s+/)
chunks.reverse.join(" ")
end
cgi = CGI.new("html4")
cgi.out do
cgi.html do
cgi.body do
cgi.hi { "sdrawkcaB txeT" } +
cgi.b { reverse_ramblings(cgi['ramblings'])) +
cgi.form("action" => "/cgi-bin/rb/form.cgi") do
cgi.textarea("ramblings") { cgi['ramblings'] } + cgi.submit
end
end
end
end
Здесь отображается многострочное поле ввода, текст в котором разбивается на слова и выводится в обратном порядке. Так, если набрать фразу «This is a test», то после обработки вы увидите «test a is This». Метод
form
CGI
method
GET
POST
POST
В этом примере демонстрируется лишь малая толика элементов форм, которые могут встречаться на HTML-странице. Полный перечень вы найдете в любом руководстве по HTML.
19.1.3. Куки
Мы уже упоминали, что HTTP — протокол без состояния. Это означает, что после того как сервер закончил обрабатывать запрос, он не может сказать, пришел ли следующий запрос от того же или какого-либо другого браузера. Тут-то и приходят на помощь куки (cookies) — способ, быть может, несколько грубоватый, сохранить состояние между последовательными запросами от одного и того же браузера.
Механизм куков работает следующим образом. Сервер посылает браузеру команду (в виде HTTP-заголовка) с просьбой сохранить пару имя-значение. Данные могут храниться в памяти или на диске. При каждом последующем запросе к любому серверу из домена, указанного в куке, браузер пошлет сохраненные данные в HTTP-заголовке.
Можно, конечно, читать и формировать куки вручную, но, как вы, наверное, догадались, в этом нет необходимости, поскольку библиотека CGI предоставляет класс
Cookie
require "cgi"
lastacc = CGI::Cookie.new("kabhi",
"lastaccess=#{Time.now.to_s}")
cgi = CGI.new("html3")
if cgi.cookies.size < 1
cgi.out("cookie" => lastacc) do
"Hit refresh for a lovely cookie"
end
else
cgi.out("cookie" => lastacc) do
cgi.html do
"Hi, you were last here at: "+
"#{cgi.cookies['kabhi'].join.split(' = ')[1]}"
end
end
end
Здесь создается кук
"kabhi"
"lastaccess"
19.1.4. Сеансы пользователей
Куки — это хорошо, если вам нужно сохранить простые данные и вы не прочь возложить на браузер заботу об их хранении. Но часто предъявляются более жесткие требования. Что если нужно сохранить много данных и вы не хотите гонять их «взад-вперед» при каждом запросе? К тому же данные могут быть секретными, так что доверять их хранение браузеру нежелательно.
В таких случаях можно воспользоваться классом
CGI::Session
CGI::Cookie
require "cgi"
require "cgi/session"
cgi = CGI.new("html4")
sess = CGI::Session.new(cgi, "session_key" => "a_test",
"prefix" => "rubysess.")
lastaccess = sess["lastaccess"].to_s
sess["lastaccess"] = Time.now
if cgi['bgcolor'][0] =~ /[a-z]/
sess["bgcolor"] = cgi['bgcolor']
end
cgi.out do
cgi.html do
cgi.body ("bgcolor" => sess["bgcolor"]) do