Mojolicious初学(二)
继续接着上期的内容讲。开讲之前,请各位注意上篇的几个要点:
1.关于Mojolicous路由(Router,也就是上篇中我们提及到的http路径)的写法。
2.关于http方法GET、POST在Mojolicious中如何表达。
下面,继续正题的内容。
一、Perl变量在html模板文件中的使用
既然是要写Web框架,除了后端的逻辑外,我们必须要学习、掌握的便是html的编写。
在任何一个后端开发框架中,用户通过网址url请求服务器返回网页的过程——由后端程序,也就是我们自己开发的代码,经过复杂的逻辑生成html文件的过程。在此过程中,我们需要的html文件,就像我们小学语文中所作的填空题模板一样,针对不同的用户,网页的主要结构是一致的,我们只需要在相应的横线上针对不同的用户填写不同的答案即可。这就是我们所说的html模板,英文名词template。
mojolicious特有的template文件后缀为.html.ep,这是mojo专有的后缀。对于Mojolicious::Lite来说,他就是在脚本末尾一串字符串而已:
use Mojolicious::Lite -signatures; # 对于Mojolicious而言,有两种方式对magic.html.ep模板文件传递Perl变量。 get '/foo' => sub ($c) { $c->stash(one => 23); #方式一 $c->stash(变量名 => 变量值) $c->render(template => 'magic', two => 24); #方式二 template与上篇文章中text类似,特指‘/foo’网址将返回一个html网页,‘magic’为文件名,two => 24是变量传递方式 }; app->start; __DATA__ #这是Mojolicous::Lite开始编写template的固定格式要求 @@ magic.html.ep #@@ 文件名.html.ep 同样是固定格式 The magic numbers are <%= $one %> and <%= $two %>. #此处为html文件内容。其中<%= $one %>是template中引入perl变量的固定格式,后面的文章中我还会详细讲解。
二、HTTP的Request和Response
这里涉及到HTTP协议的两大过程要素,一是浏览器发送给服务器的请求头request,二是服务器返回给浏览器的返回头response。这两个概念需要初学者自行查阅资料。无论是学习那个框架,凡是要进行web开发的,request、response是必须要熟知的内容。
Mojolicious中request为调用$c->req,response为调用$c->res。下面通过一个例子说明:
use Mojolicious::Lite -signatures; # 获取request信息的例子 get '/agent' => sub ($c) { my $host = $c->req->url->to_abs->host; #这是从request中获取主机信息 my $ua = $c->req->headers->user_agent; #这是从request中获取user_agent信息,关于user_agent同样是http协议的必要内容之一,请自查学习。 $c->render(text => "Request by $ua reached $host."); }; # 调用response的例子 post '/echo' => sub ($c) { $c->res->headers->header('X-Bender' => 'Bite my shiny metal ass!'); #这是在response中增加header信息。 $c->render(data => $c->req->body); #这是在调用response的body信息段。 }; app->start;