技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> [Perl]dancer 介绍

[Perl]dancer 介绍

浏览:1227次  出处信息
olkit manpage. 你需要导入 Template 的模块到你的应用中.注意 Dancer 的配置中 Template::Toolkit 的引擎是使用的 <% %> 来做默认的块识别.不是 [% %] .当然,你也可能在配置文件中修改.

全部的视图必须是 '.tt' 的扩展名.你可能想修改这个特性.

当你在程序中需要调用模板显示时,只需调用 'template' 关键字.然后给一个视图名和一个 hash 的引用 到视图中就行了(注意在 request, session 和 route params 会自动的在 view ,named request,session 和 params 中访问).

1
2
3
4
5
6
use Dancer;
use Template;
 
get '/hello/:name' => sub {
    template 'hello' => { number => 42 };
};

如上,调用的 hello 的视图,在 appdir/views/hello.tt 的视图包含如下的内容.

1
2
3
4
5
6
7
8
9
10
11
<html>
 <head></head>
 <body>
     <h1>Hello <% params.name %></h1>
     <p>Your lucky number is <% number %></p>
     <p>You are using <% request.user_agent %></p>
     <% IF session.user %>
         <p>You're logged in as <% session.user %></p>
     <% END %>
 </body>
</html>

 

LAYOUTS(版面布局)

layout 是针对视图的.通过 'layouts' 来指定,内部视图的目录.必须包含 'content' 的名字. 这会取得动作的视图的内容放到这个中.所以可以给你的动作设置全局的版面. 当你调用 'template' 关键字时,会自动的给相关可用的符号拿到模板的布局中使用. 象标准的 session, request,和 params 的符号.这可以让你插入内容到 HTML .这些网页的标题,当前网页的 tags .

这个例子中的布局: views/layouts/main.tt:

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
    <head><% page_title %></head>
    <body>
    <div id="header">
    ...
    </div>
 
    <div id="content">
    <% content %>
    </div>
 
    </body>
</html>

这个布局可以象下面这样使用:

1
2
3
4
5
6
use Dancer;
set layout => 'main';
 
get '/' => sub {
    template 'index' => { page_title => "Your website Homepage" };
};

当然,如果 layout 是设置的,你也可以禁用这个动作,象下面:

1
2
3
4
5
6
7
8
use Dancer;
set layout => 'main';
 
get '/nolayout' => sub {
    template 'some_ajax_view',
        { tokens_var => "42" },
        { layout => 0 };
};

 


静态文件

 

静态目录

静态文件会被存在 ./public 的目录.你指定不同的目录只需要设置 'public' 的选项:

1
set public => path(dirname(__FILE__), 'static');

注意这个 public 的目录名并不包含在 URL 中.一个文件 ./public/css/style.css 的路径是后面的 example.com/css/style.css.

 

路由处理中的静态文件

你可能想在路由的处理中输出静态文件.

1
2
3
4
5
6
get '/download/*' => sub {
    my $params = shift;
    my ($file) = @{ $params->{splat} };
 
    send_file $file;
};

如果你想发送 index 的网页:

1
2
3
get '/' => sub {
    send_file '/index.html'
};

 


设置

这是一个非常快的方法来修改你的应用中的参数.

只需要通过 set 的关键字来设置 key/value 的值对.

1
set setting_name => 'setting_value';

更加有用的,设置可以写到 YAML 的配置文件中. 环境指定设置可以设置在环境的配置文件中.例如,你不想在生产环境中使用 auto_reload, 你也许想设置支持日志在你的开发环境中.你可以看看 cookboos 的实例.

the Dancer::Config manpage 有更多复杂详细的支持的设置.

 


序列化

当我们写 webservice 时,数据的序列化/反序列化 是常常做的.Dancer 可以通过 serializer 自动的处理这些.

当你设置了 serializer, 新的处理的任何路由中,只要响应的数据是非标量的.就会被序列化成字符.

下面是在路由处理的例子,会返回 hash 的引用.

1
2
3
4
5
6
7
8
9
use Dancer;
set serializer => 'JSON';
 
get '/user/:id/' => sub {
    { foo => 42,
      number => 100234,
      list => [qw(one two three)],
    }
};

只要数据是非标量和设置了序列化.它就会直接返回当前的值的序列化.

所以,如果是设置了 JSON 的序列化,这个返回的结果就会如下:

1
{"number":100234,"foo":42,"list":["one","two","three"]}

当序列化可用时,会在你的系统中动态的加载 Perl 模块.

JSON

requires JSON

YAML

requires YAML

XML

requires the XML::Simple manpage

Mutable

这会自动的根据 Content-TypeAccept-type 来处理

 


实例

这是由 Dancer 创建的一个可用的 webapp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
 
# make this script a webapp
use Dancer;
 
# declare routes/actions
get '/' => sub {
    "Hello World";
};
 
get '/hello/:name' => sub {
    "Hello ".param('name');
};
 
# run the webserver
Dancer->dance;
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1