内容:
Sinatraで、formタグから送信されるWebリクエスト(HTTPメソッドとURL)を取得し表示する。
実施環境:
OS:Windows8.1
Ruby:v2.2.2
Sinatra:v1.4.6
Haml:v4.0.6
ディレクトリ構造:
作業ディレクトリ
|-sinatra_start.rb(ファイル)
|
|-views(ディレクトリ)
|-index.haml(ファイル)
|-request_print.haml(ファイル)
目次:
- Rubyソースコードを作成
- Hamlソースコードを作成
- 説明&実行
以前、以下の記事を見て頂いたことがある方は、
ソースコードに追記する形で実施すると楽です。
Hamlを使ってみた。
1.Rubyソースコードを作成
Rubyのソースコードは以下のように作成した。
sinatra_start.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: utf-8 | |
# File Name: sinatra_test.rb | |
# Create Day is 2015/05/08 | |
# Last Update Day is 2015/05/14 | |
# Gem List | |
gem 'tilt', '1.4.1' | |
# Require List | |
require 'sinatra' | |
# sinatra reloader is classic type | |
require 'sinatra/reloader' if development? | |
require 'haml' | |
require 'tilt' | |
# 外部エンコーディングを変更 | |
Encoding.default_external = "UTF-8" | |
get '/' do | |
@title = "Hello world!!" | |
@text = "Hello Haml!!" | |
haml :index | |
end | |
put '/request_print' do | |
@request_method = request.request_method | |
@request_url = request.url | |
@request_path = request.path | |
haml :request_print | |
end |
2.Hamlソースコードを作成
Hamlソースコードは以下のように作成した。
index.haml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!!! | |
%html{:lang => "ja"} | |
%head | |
%title= @title | |
%body | |
%h1 #{@title} | |
%p= @text | |
%form{:method => "POST", :action => '/request_print'} | |
%input{:type => "hidden", :name => "_method", :value => "PUT"} | |
%input{:type => "submit", :value => "ページ遷移"} |
request_print.haml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!!! | |
%html{:lang => "ja"} | |
%head | |
%title Request Print | |
%body | |
%p= "method: #{@request_method}" | |
%p= "url: #{@request_url}" | |
%p= "path: #{@request_path}" |
3.説明&実行
3.1
Ruby側の説明
「@~」の部分で、リクエストのパラメータを取得している。
「request.」で、リクエストオブジェクトにアクセスしている。
(Sinatraに用意されているためかなり楽だった...)
「haml: request_print」でrequest_print.hamlを指定。
「put '/request_print' do ~ end」は、
HTTPメソッドが「put」、パスが「/request_print」でこの部分が実行されるよう記述している。
request.request_method:HTTPメソッド
request.url:要求されたURL
request.path:要求されたパス
3.2
Haml側の説明
Web知識のgetとpost、各HTTPメソッドについては説明を割愛する。
formタグにて、「post」で「/request_print」を指定している。
しかし、hiddenで「_method」、「put」を指定している。
そのため、HTTPメソッドは「put」、パスは「/request_print」にて送られていることになる。
実際に、hiddenをコメントアウト等して実行すると、
HTTPメソッドが「post」、パスは「/request_print」で送られる。
その場合、サーバ側で受ける部分がないので、Sinatraのエラー(?)ページが表示されるが...
3.3
実行してみよう。
コマンド:ruby sinatra_start.rb
localhost:4567へアクセスし、ページ遷移のボタンを押下する。
request_printのページが表示され、
ボタンが押下された際のリクエストデータが表示されている。
以上!!
参考にさせて頂いたサイト
Sinatra本家(日本語訳)
個人的なコメント
今回、リクエストについて記事を書いたのには理由がある。
HTTPメソッドとか色々忘れたからだ...orz
なので、html側から送ってきたリクエストがどうなっているのかイメージができなくなっていた。
というわけで何が送られているか知るために今回の記事を書いたわけです。
当初、Hamlのファイル名は_(アンダーバー)を-(ハイフン)で作成していたが、
Rubyソースで参照するHamlファイルを指定するとArrgment Errorが発生した。
そのため、ファイル名を_(アンダーバー)に変更した。
(仕様...でいいのかな...?)