关注舞者教程:
http://search.cpan.org/dist/Dancer/lib/Dancer/Tutorial.pod
我正在使用我自己的sqlite3数据库与此架构
CREATE TABLE if not exists location (location_code TEXT PRIMARY KEY, name TEXT, stations INTEGER);
CREATE TABLE if not exists session (id INTEGER PRIMARY KEY, date TEXT, sessions INTEGER, location_code TEXT, FOREIGN KEY(location_code) REFERENCES location(location_code));
Run Code Online (Sandbox Code Playgroud)
我的舞者代码(helloWorld.pm)用于数据库:
package helloWorld;
use Dancer;
use DBI;
use File::Spec;
use File::Slurp;
use Template;
our $VERSION = '0.1';
set 'template' => 'template_toolkit';
set 'logger' => 'console';
my $base_dir = qq(/home/automation/scripts/Area51/perl/dancer);
# database crap
sub connect_db {
my $db = qw(/home/automation/scripts/Area51/perl/dancer/sessions.sqlite);
my $dbh = DBI->connect("dbi:SQLite:dbname=$db", …Run Code Online (Sandbox Code Playgroud) 如何从不在“app/views”目录中的 Dancer::Plugin 加载模板而不更改视图默认目录?
这不起作用/它将默认视图路径添加到文件路径/:
package Dancer::Plugin::MyPlugin;
use Dancer ':syntax';
use Dancer::Plugin;
any '/test' => sub {
template '/path_to_template/test.tt' => {
};
};
register_plugin;
1;
Run Code Online (Sandbox Code Playgroud) 我尝试在舞者中显示一个数组项,这里是代码:
get '/' => sub {
my @rows = ('aaa','bbb','ccc');
template 'crud.tt', {'rows' => \@rows};
};
Run Code Online (Sandbox Code Playgroud)
模板是:
<h2><% $rows[1] %></h2>
<h2><% rows[1] %></h2>
<% FOREACH r IN rows %>
<p><% r %></p>
<% END %>
Run Code Online (Sandbox Code Playgroud)
在h2元素中什么都没显示,正确的方法是什么?
如何使用 Perl Dancer 访问请求的授权标头?
我已经测试了我的客户端,它成功地传递了Authorization标头,但它没有出现在request->headers哈希中。我可以通过简单地拼写错误或在前面附加一个来让它显示出来X-,但我正在制作一个 API,并且希望使用传统标头来传递请求签名以进行身份验证。
我有一个数组,我传递给TT文件,用于填充导航栏.
我正在使用主模板作为主体内容的基础和子模板.
我想知道是否可以声明'主模板应该总是接收这个数组',而不是每次加载视图时都必须传递这个数组(哦,是的,我正在使用Dancer btw:P),ex :
get '/' => sub {
template 'index', { for_all_i_know => $this_never_changes }
}
get '/about' => sub {
template 'about', { for_all_i_know => $this_never_changes }
}
Run Code Online (Sandbox Code Playgroud)
而不是那样做,有没有办法清理它?就像是:
bind template 'main' { for_all_i_know => $this_never_changes };
Run Code Online (Sandbox Code Playgroud)
那样我就可以这样做:
get '/' => sub {
template 'index';
}
Run Code Online (Sandbox Code Playgroud)
并且主模板仍会加载变量'for_all_i_know'
我对 Perl 框架 Dancer 非常陌生。截至目前,我有一个 get http 侦听器正在工作。我有一个 Angular 框架试图将 json 字符串发布到 Dancer。我如何检索 json 并可能将其分配给标量变量($json)。
get '/games' => sub {
header 'Access-Control-Allow-Origin' => '*';
&loadgames();
return $games;
};
post '/newgame' => sub {
header 'Access-Control-Allow-Origin' => '*';
#what should i put here to retrieve the json string
#I plan to pass the json string to a sub to convert to XML
};
Run Code Online (Sandbox Code Playgroud)
我不确定我是否选择 Dancer 作为获取和发布数据的后端框架。
谢谢您的帮助!
我正在使用Dancer2来构建Web应用程序.它工作得很好但是当我在浏览器中查看源代码时,生成的HTML源代码充满了分散的空白,就像这样
<tr>
<td>2</td>
<td>Cheeseburger</td>
<td>4.50 €</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我的模板<% ... %>在现在空白的地方有代码.我更喜欢它看起来像这样:
<tr>
<td>2</td>
<td>Cheeseburger</td>
<td>4.50 €</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好:
<tr><td>2</td><td>Cheeseburger</td><td>4.50 €</td></tr>
Run Code Online (Sandbox Code Playgroud)
我正在使用Template :: Toolkit,并认为该TRIM属性正是我需要的,并将其添加到我的config.yml:
template: "template_toolkit"
session: "YAML"
engines:
session:
YAML:
cookie_duration: 6 months
template:
template_toolkit:
start_tag: '<%'
end_tag: '%>'
TRIM: '1'
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我已经改变start_tag和end_tag不同的东西(验证此文件被读取)和实际工作.但是TRIM选项没有.
我使用了错误的选项或在错误的地方提供它吗?我所做的所有谷歌搜索都展示了如何以编程方式设置TT选项,例如在这个答案中.但由于我没有明确地实例化TT相关的任何内容,我甚至不知道应该在哪里放置这样的代码.
我创建了我的应用程序dancer2 -a so.
意见/ index.tt
<table>
<tbody>
<% FOREACH item in group.items %>
<tr>
<td><% item.order_num %></td>
<%# one-line comment %>
<%# one-line …Run Code Online (Sandbox Code Playgroud) 我正在运行Dancer并发现它很慢 - 页面需要很长时间才能渲染.
这是Dancer :: Introduction的示例代码:
#!/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;
Run Code Online (Sandbox Code Playgroud)
它需要我的浏览器10秒钟来获取和呈现响应(在firefox中使用firebug).
和舞者的消息:
[20734] core @0.000228> request: GET / from 192.168.1.101 in /usr/lib/perl5/site_perl/5.8.8/Dancer/Handler.pm l. 57
[20734] core @0.000809> [hit #44]trying to match `/' against /^\/$/ in /usr/lib/perl5/site_perl/5.8.8/Dancer/Route.pm l. 84
[20734] core @0.000953> [hit #44] --> got …Run Code Online (Sandbox Code Playgroud) 这是我之前关于显示unicode字符串差异的问题的后续内容.事实证明,字符串看起来是相同的,但是在其中一个字符串中,UTF8标志处于打开状态.
SV = PVMG(0x4cca750) at 0x4b3fc90
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
IV = 0
NV = 0
PV = 0x1eda410 "flurbe"\0 [UTF8 "flurbe"]
CUR = 6
LEN = 16
Run Code Online (Sandbox Code Playgroud)
VS
SV = PV(0xf28090) at 0xf4b6a0
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0xf37b90 "flurbe"\0
CUR = 6
LEN = 16
Run Code Online (Sandbox Code Playgroud)
当我加密字符串时,这似乎会产生sha512哈希值之间的差异.据我所知,舞者是第一个产生utf8的结果,我的另一个脚本只是一个命令行,没有使用舞者,我怎么能强迫它以同样的方式行事呢?
我在Dancer中有一个非常简单的问题:我有一系列名字,我想在模板中打印每一个.这些名称来自外部源(不是数据库).但是,当我尝试对模板中的列表进行foreach时,我只得到第一个值.
码:
use Dancer;
use Template;
set 'template' => 'template_toolkit';
get '/' => sub {
my @list = ("one","two","three");
template 'list.tt', {
'values' => @list,
};
};
dance;
Run Code Online (Sandbox Code Playgroud)
和模板:
<ul>
<%FOREACH item IN values %>
<li><% item %></li>
<%END%>
</ul>
Run Code Online (Sandbox Code Playgroud)
这仅输出具有单个项目"一个"的列表.我错过了什么?