免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iakuf
打印 上一主题 下一主题

Perl 的 Web 框架魔咒 (Mojolicious) 的中文网站-本帖回帖答疑 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2013-08-31 23:26 |只看该作者
本帖最后由 hutong236 于 2013-08-31 23:28 编辑

扶凯,又麻烦你了,
我看Mojocast #3: Authentication, Helpers, and Plugins 视频,里有段代码测试和上面结果不一样.
按视频上输入的username为"aaa"或是password="bbb",都能跳到"$self->render(text => 'Welcome to Moncorp1'); ",但是我测试结果
输入的username不为"aaa"或不是password="bbb",都能跳到"$self->render(text => 'Welcome to Moncorp1');",怎么都不显示"$self->render(text => 'denied')",不知道是我那里搞错了?
谢谢!
  1. #!/usr/bin/perl -w.
  2. use Mojolicious::Lite;

  3. get '/login' => sub {shift->render('login')};


  4. post '/momcorp' => sub {
  5.         my $self = shift;
  6.         print $self->param('password'),"\n";
  7.         $self->render(text => 'denied') if
  8.           $self->param('username') ne 'aaa' or
  9.           $self->param('password') ne 'bbb';
  10.         $self->render(text => 'Welcome to Moncorp1');
  11. };

  12. app->start;
  13. @@ login.html.ep
  14. <h1>Login</h1>
  15. <form method="post" action="/momcorp">
  16.         Username:<input type="text" name="username" />
  17.         Password:<input type="text" name="password" />
  18.         <input type="submit" value="Login" />
  19. </form>
复制代码

论坛徽章:
0
62 [报告]
发表于 2013-09-02 01:12 |只看该作者
回复 61# hutong236


    两个render肯定是显示最后一个啦,验证失败要立即return,否则最后一句还是会执行。

论坛徽章:
0
63 [报告]
发表于 2013-09-02 15:43 |只看该作者
gzadsluser 发表于 2013-09-02 01:12
回复 61# hutong236

但是我看人家视频上都没有加return,测试也过啊.
只是后面加了以下代码,换成条件and就行了.

  1. under sub {
  2.         my $self = shift;
  3.         return 1 if $self->params_auth( username => password => sub{
  4.         return 1 if "@_" eq 'aaa bbb'
  5.         });

  6.         $self->render(text => 'denied');
  7.         return;
  8. };

  9. post '/momcorp' => sub {
  10.         my $self = shift;
  11.         $self->render(text => 'denied') if $self->params_auth( username => password => sub{
  12.                 return 1 if "@_" eq 'aaa bbb'
  13.         });
  14.         $self->render(text => 'Welcome to Moncorp1');
  15. };
复制代码

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
64 [报告]
发表于 2013-09-03 06:03 |只看该作者
回复 63# hutong236

gzadsluser 讲得对,  两个 render 肯定是显示最后一个


   

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
65 [报告]
发表于 2013-09-08 15:40 |只看该作者
回复 1# iakuf


    假设如下语句:

$res = db->query(xxx);
$self->render(msg=>$res);

模板里面

%= $msg

会是乱码。但是如果加上
% use Encode;
%= decode_utf8($msg)
则输出正常。
推测应当是mojo在render的时候对传入的数据进行了encode。如果不让它自动encode?

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
66 [报告]
发表于 2013-09-08 21:52 |只看该作者
本帖最后由 iakuf 于 2013-09-08 21:57 编辑

回复 65# snriyt
数据库连接的时候设置了 mysql_enable_utf8 没?
另外,在写程序的时候,可以直接在程序的 Controller 中前面加上
  1. use utf8;
复制代码
有关语言的东西,在 Mojo 的 Wiki 中提到过.链接如下
How to work with UTF-8?

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
67 [报告]
发表于 2013-09-08 22:37 |只看该作者
回复 66# iakuf


    3qs,我试试

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
68 [报告]
发表于 2013-09-09 18:41 |只看该作者
回复 67# snriyt
有结果记得回复,也好告诉大家能不能解决.

   

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
69 [报告]
发表于 2013-09-10 12:49 |只看该作者
好吧,的确能解决,不过必须
  1. my $dbh = DBI->connect($data_source, undef, undef, {sqlite_unicode => 1});
复制代码
下面就行不通的
  1. my $dbh = DBI->connect($data_source);
  2. $dbh-> {sqlite_unicode} =1;
复制代码

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
70 [报告]
发表于 2013-09-10 13:22 |只看该作者
回复 69# snriyt
这是原生的 DBI 模块的限制.在讲,他本来就没打算让你可以不断的修改字符集.


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP