htmlのフォームから飛ばしたデータをrubyで処理する方法を紹介。
簡易的なサービスを想定しているので、
WEBrick+SQlite3を使用。
SQliteはdbiライブラリで扱っている。
【index.html】
# ヘッダー等は割愛
<form action="entry">
<input type="text" name="name">
<input type="submit" value=" 送信 ">
</form>
【server.rb】
#! /usr/local/bin/ruby -Ks
# -*- encoding: UTF-8 -*-
require 'rubygems'
require 'webrick'
require 'erb'
require 'dbi'
config = {
:port => 8099,
:DocumentRoot => '.'
}
server = WEBrick::HTTPServer.new( config )
server.mount_proc("/entry") { |req, res|
dbh = DBI.connect( 'DBI:SQlite3:test.db' )
dbh.do("insert into date
values('#{req.query['name']}');")
dbh.disconnect
template = ERB.new( File.read('entried.html') )
res.body << template.result( binding )
}
trap(:INT) do
server.shutdown
end
server.start
【entried.html】
登録完了
action名と同じ名前をmount_porcでしてあげると、それ以下の処理をしてくれる。
その際templateで返答するデータを決めているので、html形式で返す(erbなどでもOK)
trapはControl+cでサーバを停止させる仕組み。
ちなみに
WEBrick::HTMLServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler)
とserver = WEBrick::HTTPServer.new( config )の下あたりにでも追記すると、拡張子erbを処理済みのファイルとして扱えるようになる。
セキュリティレベルは推して知るべし。
0 件のコメント:
コメントを投稿