Perl入学式#6に参加
今回は前回の復習とかなし
いきなり、Mojoliciousのお話からで前回の答え合わせとはななかった
準備
インストール
cpanm Mojolicious
※基本的にはcpanmでインストール
アプリジェネレート
mojo generate lite_app hello
※これで「hello」というファイルを作成して、このファイルの中にシンプルなWAFが出来上がる。
サンプル
hello
#!/usr/bin/env perl use Mojolicious::Lite; # Documentation browser under "/perldoc" plugin 'PODRenderer'; get '/' => sub { my $self = shift; $self->stash( title => "hello world" ); $self->render('index'); }; get '/profile' => sub { my $self = shift; $self->stash( name => "shigeharu matsumoto" ); $self->stash( hobby => "昼寝" ); $self->stash( language => "Perl" ); $self->render('profile'); }; get '/fizzbuzz' => sub { my $self = shift; $self->stash( title => "fizz buzz test" ); $self->render('fizzbuzz'); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; Welcome to the Mojolicious real-time web framework! @@ profile.html.ep <html> <head> <title><%= $name %></title> </head> <body style="padding: 30px;"> 私の名前は<%= $name %>です。<br /> 趣味は<%= $hobby%>で、好きなプログラミング言語は<%= $language %>です。 </body> </html> @@ layouts/default.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><%= content %></body> </html> @@ fizzbuzz.html.ep <html> <head> <title><%= $title %></title> </head> <body style="padding: 30px;"> <div> 1から100まででFizz、Buzzを出力する </div> <hr /> <table border="1"> <tr> <% for(my $num = 1;$num <= 100;$num++){ %> <th><%= $num %></th> <td> <% if($num % 3 == 0){ %> Fizz <% }elsif($num % 5 == 0){ %> Buzz <% }elsif($num % 3 == 0 && $num % 5 == 0){ %> FizzBuzz <% }else{ %> <%= $num %> <% } %> </td> </tr/> <% } %> </table> </body> </html>
簡易BBS
#!/usr/bin/env perl use Mojolicious::Lite; use File::Slurp; my @entries = (); get '/' => sub { my $self = shift; $self->stash( entries => \@entries); $self->render('index'); }; post '/post' => sub { my $self = shift; my $entry = $self->param('body'); my $name = $self->param('name'); my $mail = $self->param('mail_address'); # $self->stash( body => ""); # $self->stash( entry => $entry ); push @entries, { name => $name, mail_address => $mail, message => $entry }; # 配列に格納 # $self->render('post'); $self->redirect_to('/'); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; % title '入力フォーム'; %= form_for '/post' => method => 'POST' => begin <table> <tr> <td> nama: %= text_field 'name' </td> <td> mail: %= text_field 'mail_address' </td> </tr> <tr> <td colspan="2"> %= text_area 'body' => cols => '60' => rows => '6' </td> </tr> </table> <br /> %= submit_button '投稿する' % end % for my $entry (@{$entries}) { <p> <strong>name</strong>:<%= $entry->{name} %> <strong>email</strong>:<%= $entry->{mail_address} %> </p> <div> <%= $entry->{message} %> </div> <hr /> % } @@ post.html.ep % layout 'default'; % title '出力'; %= form_for '/post' => method => 'POST' => begin %= text_field 'body' %= submit_button '投稿する' % end <p><%= $entry %></p> @@ layouts/default.html.ep <!DOCTYPE html> <html> <head> <title><%= title %></title> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> <!-- Optional theme --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script> </head> <body> <div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Project name</a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="#">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#contact">Contact</a></li> </ul> </div><!--/.nav-collapse --> </div> </div> <div class="container" style="margin-top: 70px;"> <div class="starter-template"> <%= content %> </div> </div> </body> </html>
Mojolicous学習の参考になりそうな
http://d.hatena.ne.jp/perlcodesample/20110402/1305602329
http://qiita.com/yusukebe/items/c9fb34096e61976f062f
http://mojolicio.us/
http://yusukebe.com/archives/20120225/081052.html
まとめ
なんかヘルパーみたいのがあるけど無理して使う必要なさそうなので安心。
あれを使用するとデザイナーさんと連携するときにやりにくそうなんで…。
シンプルなものの場合はLiteの方でページ数がごちゃごちゃしそうな場合は通常のMojolicoousで対応する。
ちゃんとしたアプリの開発はまだ、やっていないのでそろそろ何か作ってみることにする。
データベースとかログとかいろいろ調べないと…
うん、アイデアはなにもないけどね