免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17758 | 回复: 7
打印 上一主题 下一主题

本人用Dancer框架写的个人网站源码(+1.3011版代码) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-22 11:14 |显示全部楼层 |倒序浏览
本帖最后由 aef25u 于 2011-03-28 15:43 编辑

因最近有人反映代码有问题,检查后发现是由于Dancer版本更新引起的:
-------------------------------------------
Dancer最新版本-1.3011请下载此附件(2011-03-28更新): MyDancer.rar (42.7 KB, 下载次数: 350)
-------------------------------------------

这是本人用perl的Dancer+DBI+SQLite+TT实现的网站源码
此附件为旧版Dancer: dancer.rar (35.99 KB, 下载次数: 232)

运行环境:Windows XP、strawberry perl、IE

实现了:
    1、Template::Toolkit、SQLite、Authen::Simple:BI、Dancer::Session::Storable在dancer框架中的简单运用。
    2、javascript+css实现二级导航栏
    3、网站Perl代码着色显示
    4、post方法的注册表单、登陆表单和留言本。

内附(位于dancer目录下):
    start.bat  方便本机运行WEB服务器 (然后在IE中输入http://localhost:3000/)
    SQLite.pl  生成test.db数据库

1、dancer.pl
  1. #!/usr/bin/perl
  2. use DBI;
  3. use Dancer;
  4. use MyDancer;
  5. use Dancer::Plugin::Database;

  6. my @pages = qw(TtExample SqlExample  registerExample loginExample GuesBookExample configExample layoutTT);

  7. #与use MyDancer等同;
  8. #get '/', sub {
  9. #    layout 'main.tt';
  10. #    template 'home';
  11. #};

  12. get '/:page' => sub {
  13.     layout 'main.tt';
  14.     my ($page) = params->{page};
  15.     pass and return false unless grep /$page/, @pages;
  16.     template $page;
  17. };

  18. get '/tt/scalar', sub {
  19.     layout 'main.tt';   
  20.     template 'scalar' =>
  21.       { content => '欢迎您的到来!希望你也会和我一样喜欢上Perl与Dancer!', };
  22. };

  23. get '/tt/table', sub {
  24.     layout 'main.tt';
  25.     my $r = [ { a => 1, b => 2, c => 3, },
  26.               { a => 2, b => 4, c => 6, } ];
  27.     template 'table' => { r => $r, };
  28. };

  29. get '/tt/filter', sub {
  30.     layout 'main.tt';
  31.     template 'filter';
  32. };

  33. get '/Sql/dbiSqlTest', sub {
  34.     layout 'main.tt';
  35.     my $dbh =
  36.       DBI->connect( "dbi:SQLite:dbname=test.db",,,
  37.         { RaiseError => 1, AutoCommit => 1 } );
  38.     my $sth = $dbh->prepare( 'select * from test where id = 1' );
  39.     $sth->execute;
  40.     my @row_ary = $sth->fetchrow_array;
  41.     template 'dbiSqlTest' => { head => 'use DBI', content => $row_ary[1], };
  42. };

  43. get '/Sql/PluginSqlTest', sub {
  44.     layout 'main.tt';
  45.     my $sth = database->prepare( 'select * from test where id = 1' );
  46.     $sth->execute;
  47.     my @row_ary = $sth->fetchrow_array;
  48.     template 'PluginSqlTest',
  49.       {
  50.         head    => 'use Dancer::Plugin::Database',
  51.         content => $row_ary[1],
  52.       };
  53. };

  54. #表单注册
  55. get '/book/register' => sub {
  56.     layout 'login_main';
  57.     template
  58.       'register' => { path => 'GuestBook' },

  59. };

  60. post '/book/register' => sub {
  61.     my $sth =
  62.       database->prepare('SELECT * FROM authentication  WHERE username=?');
  63.     $sth->execute( params->{username} );
  64.     if ( $sth->fetch ) {
  65.         return "User had been registered, sorry";
  66.     }
  67.     $sth = database->prepare('INSERT INTO authentication  VALUES(NULL,?,?,?)');
  68.     $sth->execute(
  69.         params->{username},
  70.         params->{password},
  71.         params->{fmemail},
  72.     );

  73.     session user => params->{username};
  74.     redirect params->{path};

  75. };

  76. #GuestBook
  77. get '/book/GuestBook' => sub {
  78.     layout 'login_main';
  79.     my @myarray;
  80.     my $sth = database->prepare( 'select * from comments order by id asc' );
  81.     $sth->execute;
  82.     while(my @row_ary = $sth->fetchrow_array){
  83.     push @myarray, { user => $row_ary[1], info => $row_ary[2] };
  84.     }

  85.     template 'GuestBook' => {message=>\@myarray};  

  86. };

  87. post '/book/GuestBook' => sub {
  88.     my $username=session('user');
  89.     if (length params->{fmmsg} > 4096) {
  90.       return "Your comment is too long, sorry";
  91.     }
  92.     my $sth =
  93.       database->prepare('INSERT INTO comments  VALUES(NULL,?,?)');
  94.     $sth->execute(
  95.       $username,
  96.       params->{fmmsg},
  97.     );
  98.     session user => $username;
  99.     redirect 'GuestBook';

  100. };

  101. #表单登陆
  102. load_app 'Pamlogin';

  103. dance;
复制代码
2、Pamlogin.pm
  1. package Pamlogin;
  2. use Authen::Simple::DBI;
  3. use Dancer ':syntax';

  4. # will match '/book/*'
  5. prefix '/book';

  6. # will match '/book/login'
  7. get '/login' => sub {
  8.     layout 'login_main';
  9.     template
  10.       'login' => { path => 'GuestBook' },

  11. };

  12. post '/login' => sub {

  13.     my $dbi = Authen::Simple::DBI->new(
  14.         dsn       => 'dbi:SQLite:dbname=test.db',
  15.         statement => 'SELECT password FROM authentication WHERE username = ?'
  16.     );

  17.     if ( $dbi->authenticate( params->{username}, params->{password} ) ) {
  18.         session user => params->{username};
  19.         redirect params->{path};
  20.     }
  21.     else {
  22.         redirect 'login';
  23.     }
  24. };

  25. get '/logout' => sub {
  26.     session->destroy;
  27.     redirect 'GuestBook';
  28. };

  29. true;
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-07-22 11:21 |显示全部楼层
回复 2# 兰花仙子


本人是门外汉,非计算机专业,学perl是兴趣,还请兰花仙子多多指教。

论坛徽章:
0
3 [报告]
发表于 2011-03-01 20:19 |显示全部楼层
本帖最后由 aef25u 于 2011-03-01 20:21 编辑

回复 11# mitmax

安装  Template::Toolkit,  使用时用<%   %>而非[%  % ]

论坛徽章:
0
4 [报告]
发表于 2011-03-04 16:58 |显示全部楼层
本帖最后由 aef25u 于 2011-03-04 17:12 编辑

回复 13# mitmax
  1. while ( $sth->fetchrow_array ) {

  2.              $str .= { Type => "$Type", Ip => "$Monitor_Ipaddress", Name => "$ProjectName" } . ",";

  3.         }

  4. ......  

  5.       template 'Mysqldatabase' => { Mysql =>[$str], head => 'use DBI' };
复制代码
以上有错,你试试这样行不行,以下代码未经测试(自已注意将{}补齐):
  1. my @srt;

  2. while ( my @row_ary = $sth->fetchrow_array ) {
  3.             
  4.           push  @srt,{ Type => $row_ary[2], Ip => $row_ary[3], Name => $row_ary[4]} ;   
  5.            #或push  @srt,{ Type => "$Type", Ip => "$Monitor_Ipaddress", Name => "$ProjectName" } ;

  6.         }
  7. ......
  8.         #$re_srt做MysqlQuery()的返回值
  9.         my $re_srt=\@srt;
  10. ......  
  11.      
  12.       template 'Mysqldatabase' => { Mysql =>$status, head => 'use DBI' };
  13.    
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-03-27 20:21 |显示全部楼层
回复 15# snriyt

模块内部错误,你用cpanm试着再装一下Dancer::Session::Storable。如果不行我也解决不了。
那你就将Dancer.pl数第2行load_app 'Pamlogin注释掉。不过这样留言本注册、登录相关页面就打不开了。

论坛徽章:
0
6 [报告]
发表于 2011-03-28 00:33 |显示全部楼层
本帖最后由 aef25u 于 2011-03-28 00:37 编辑

回复 15# snriyt

检查了下是因为Dancer版本更新引起的错误,请重新下载网站源码,位于1楼的MyDancer附件。
启动文件与数据库文件都调整到:MyDancer/bin内了。

另网站内容仍为旧版Dancer建站的过程,与新版比可能会有差异,MyDancer附件中未做修改,所以仅供参考。

论坛徽章:
0
7 [报告]
发表于 2011-03-29 18:24 |显示全部楼层
回复 21# longjinjiu

cpan App::cpanminus
然后cpanm Template::Toolkit

论坛徽章:
0
8 [报告]
发表于 2011-08-20 21:46 |显示全部楼层
谢谢分享,有没有更详细的说明,拓补图

如,自己写的代码放在什么地方,然后TT在那..........
billcool 发表于 2011-08-20 17:45


跑起来后看网页上的内容,里边有描述,虽然不是很具体清晰,但有提到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP