Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

Если необходимо решение на основе шаблонов, возможно, подойдет библиотека Amrita . Обратите также внимание на Cerise — сервер приложений на базе Amrita .

Наверное, существуют и другие библиотеки. Если вы не нашли того, что искали, среди упомянутых здесь продуктов, обратитесь к поисковой машине или задайте вопрос в конференции.

19.1.1. Введение в библиотеку cgi.rb

Библиотека

cgi.rb
включена в стандартный дистрибутив Ruby. Ее функциональность в основном реализована в центральном классе
CGI
. Первое, что нужно сделать при работе с данной библиотекой, — создать экземпляр этого класса.

require "cgi"

cgi = CGI.new("html4")

Инициализатор класса CGI принимает единственный параметр — уровень спецификации языка HTML, который должен поддерживаться методами генерации разметки, входящими в пакет CGI. Эти методы избавляют программиста от ручного написания длинных фрагментов экранированной разметки в достаточно простом коде на Ruby:

cgi.out do

 cgi.html do

cgi.body do

cgi.h1 { "Hello Again, "} +

cgi.b { cgi['name']}

end

 end

end

Здесь мы почти точно воспроизвели функциональность предыдущей программы, воспользовавшись библиотекой CGI. Как видите, класс

CGI
берет на себя заботу о разборе и сохранении параметров в структуре, напоминающей хэш. Поэтому, если указать URL
some_program.cgi?age=4
, значение параметра
age
можно получить как
cgi['age']
.

Отметим, что в данном примере нам понадобилось только значение, возвращаемое блоком; HTML-разметка строится постепенно и сохраняется, а не выводится сразу же. Это означает, что конкатенировать строки абсолютно необходимо, иначе мы увидели бы только последнюю вычисленную строку.

В классе

CGI
есть также удобные механизмы для кодирования строк URL и экранирования специальных символов в HTML и XML-коде. URL-кодированиеэто представление «небезопасных» символов с помощью других символов, допустимых в URL. В результате получаются странные строки, изобилующие знаками
%
, которые вы часто встречали в Web. На самом деле это просто шестнадцатеричные ASCII-коды символов с предшествующим знаком
%
.

require "cgi"

s = "This| is"^ (aT$test"

s2 = CGI.escape(s) # "This%7C+is%5E%28aT%24test"

puts CGI.unescape(s2) # Печатается "This| is"(aT$test"

Аналогично класс

CGI
позволяет экранировать части HTML или XML-текста, которые должны отображаться в браузере буквально. Например, без специальных мер строка
"<some_stuff>"
не будет показана в браузере именно в таком виде. Если необходимо показать саму разметку, например, в качестве примера в руководстве по HTML , то можно воспользоваться классом
CGI
для преобразования специальных символов:

require "cgi"

some_text = "<B>This is how you make text bold</B>"

translated = CGI.escapeHTML(some_text)

# "<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
имеются методы для генерирования всех элементов HTML-форм. В примере ниже показано, как можно вывести и обработать форму.

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
— один из методов отправки формы, определенных в протоколе HTTP (
GET
,
POST
и т.д.). По умолчанию предполагается значение
POST
.

В этом примере демонстрируется лишь малая толика элементов форм, которые могут встречаться на HTML-странице. Полный перечень вы найдете в любом руководстве по HTML.

19.1.3. Куки

Мы уже упоминали, что HTTP — протокол без состояния. Это означает, что после того как сервер закончил обрабатывать запрос, он не может сказать, пришел ли следующий запрос от того же или какого-либо другого браузера. Тут-то и приходят на помощь куки (cookies) — способ, быть может, несколько грубоватый, сохранить состояние между последовательными запросами от одного и того же браузера.

Механизм куков работает следующим образом. Сервер посылает браузеру команду (в виде HTTP-заголовка) с просьбой сохранить пару имя-значение. Данные могут храниться в памяти или на диске. При каждом последующем запросе к любому серверу из домена, указанного в куке, браузер пошлет сохраненные данные в HTTP-заголовке.

Поделиться:
Популярные книги

Развод с драконом. Отвергнутая целительница

Шашкова Алена
Фантастика:
фэнтези
4.75
рейтинг книги
Развод с драконом. Отвергнутая целительница

Неудержимый. Книга XXII

Боярский Андрей
22. Неудержимый
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXII

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Глэрд IX: Легионы во Тьме

Владимиров Денис
9. Глэрд
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Глэрд IX: Легионы во Тьме

Воевода

Ланцов Михаил Алексеевич
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Воевода

На границе империй. Том 10. Часть 7

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 7

Кодекс Охотника. Книга XXXII

Винокуров Юрий
32. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXII

Воронцов. Перезагрузка. Книга 3

Тарасов Ник
3. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 3

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Мастер 10

Чащин Валерий
10. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 10

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Слово мастера

Лисина Александра
11. Гибрид
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Слово мастера

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый