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;

 

 

 

标签