[Perl]dancer 介绍
全部的视图必须是 '.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-Type 和 Accept-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; |
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶 凯 来源: 扶凯
- 标签: dancer
- 发布时间:2012-01-27 18:20:38
- [55] Oracle MTS模式下 进程地址与会话信
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [53] 如何拿下简短的域名
- [53] android 开发入门
- [51] Go Reflect 性能
- [50] 图书馆的世界纪录
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [46] 【社会化设计】自我(self)部分――欢迎区
- [39] 程序员技术练级攻略
- [32] 视觉调整-设计师 vs. 逻辑