Hatena::Groupcatalyst

LAPISLAZULI HILL#Catalyst このページをアンテナに追加 RSSフィード

2007-10-10

[][]C::P::Datetimeのメモ1(使い方) C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst C::P::Datetimeのメモ1(使い方) - LAPISLAZULI HILL#Catalyst のブックマークコメント

このやり方よりCatalyst::Model::Adaptorを使った方がよいです.やりかたは404 Error - Not Foundで,DateTimeでのやり方も分かりますよ

-----

PluginというよりDateTime自体の自分メモその1

ふつうの使い方

use Catalyst qw/ DateTime /;

my $dt_now = $c->datetime; # now   2007-10-10T07:09:54
my $dt_now2 = $c->dt;      # short 2007-10-10T07:09:54
my $dt_today = $c->datetime( year => 2007, month => 10, day => 10); # 2007-10-10T00:00:00

$c->datetime->todayとかないじゃん

C::P::DateTime::Constructorを使う

  • from_epoch, today
  • from_object
  • from_day_of_year
  • last_day_of_month

というメソッドを$cに生やしてくれる

use Catalyst qw/ DateTime::Constructor /;

my $dt_today = $c->today; # 2007-10-10T00:00:00

my $from_day_of_year  = $c->from_day_of_year(  year => 2007, day_of_year => 300 ); # 2007-10-27T00:00:00
my $last_day_of_month = $c->last_day_of_month( year => 2007, month => 10); # 2007-10-31T00:00:00

アプリ用Pluginを作った方がいいかも

timezoneとか指定するのがめんどくさい.最初はC::P::DateTimeを継承しようと思ったけど,コピペしてみた.無指定時のtzはAsia/Tokyoで決め打ちにしてみた

package MyApp::Plugin::DateTime;

use strict;
use warnings;

use Catalyst::Exception;
use DateTime;

our $VERSION = "0.01";

sub datetime {
    my $c = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->new(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->now(time_zone => $tz);
    }
}

sub today {
    my $c  = shift;
    my %params = @_;

    my $tz = delete $params{time_zone} || 'Asia/Tokyo';

    # use params if argued
    if (%params) {
        return DateTime->today(\%params)->set_time_zone($tz);
    }
    else { # otherwise use now
        return DateTime->today(time_zone => $tz);
    }
}

1;

これに,必要に応じて他のメソッドも生やしていくとか,timezone指定を設定から読み込むとか

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20071010

2007-01-05

[][]flavour flavour - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - flavour - LAPISLAZULI HILL#Catalyst flavour - LAPISLAZULI HILL#Catalyst のブックマークコメント

Catalyst Advent Calendar - Day 20を試して見た.やったのは去年だけど

あっさり動きました.コードは記事そのままなので省略.flavour(読み方はフレーバ)とはBlosxomにおいて拡張子によるテンプレートの切り替えを行う仕組みのようです.Blosxomは使ったことがないので適当なこと言ってるかもしれません

これをどう使うかな?

ddeqcaddeqca2007/04/11 12:47<a href=http://roccofoloper.sblog.cz>sauna belt</a> sauna belt http://roccofoloper.sblog.cz sauna belt

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20070105

2006-11-14

[][]HTML::Widget HTML::Widget - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - HTML::Widget - LAPISLAZULI HILL#Catalyst HTML::Widget - LAPISLAZULI HILL#Catalyst のブックマークコメント

The CPAN Search Site - search.cpan.org

Catalyst::Plugin::HTML::Widget - search.cpan.org

HTML::Widget - search.cpan.org

formの生成とか,Validateとか.簡単なものならこれで作れば早くできそう.

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20061114

2006-11-09

[][]Session::Store::FastMmap Session::Store::FastMmap - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Session::Store::FastMmap - LAPISLAZULI HILL#Catalyst Session::Store::FastMmap - LAPISLAZULI HILL#Catalyst のブックマークコメント

Session::FastMmap - LAPISLAZULI HILL#Catalyst - Catalystグループの続き

myApp.pmを書き換えてSession::FastMmapにかえて下記の3つのプラグインを使う

    Session
    Session::Store::FastMmap
    Session::State::Cookie

これでもうok.sessionと連携して$c->userに情報を格納してくれる.設定したauthenticationのuser_classのカラム名でアクセスできる.たとえば$c->user->usernameや$c->user->emailなど

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20061109

2006-11-08

[][]Authenticationでパスワードの暗号化 Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst Authenticationでパスワードの暗号化 - LAPISLAZULI HILL#Catalyst のブックマークコメント

The CPAN Search Site - search.cpan.org

書いてあるようにパスワードをSHA1ハッシュ化

myApp.yml

authentication:
  dbic:
    user_class: myApp::Model::DBIC::Users
    user_field: username
    password_field: password
    password_type: hashed
    password_hash_type: SHA-1

下2行追加.分ける必要なかったか…

[][]Authentication::Store::DBIC Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst Authentication::Store::DBIC - LAPISLAZULI HILL#Catalyst のブックマークコメント

Catalyst::Plugin::Authentication::Store::DBIC - search.cpan.org

Remedies Wisdom

サンプルのやり方を順番に試してみる,ちょっとだけいまの構造に合わせて,sekimuraさんの記事に合わせてアレンジ.userのdbもmysqlに置き換えただけでほぼ同じ.とりあえずパスワードも平文で,あとで暗号化を

myApp.yml

authentication:
  dbic:
    user_class: myApp::Model::DBIC::Users
    user_field: username
    password_field: password

myApp.pm

use Catalyst qw/
    ...
    Authentication
    Authentication::Store::DBIC
    Authentication::Credential::Password
/;

ログイン関連のコードはRoot.pmに書いてしまいました

まずlogin

sub login : Local {
    my ( $self, $c ) = @_;
    $c->stash->{template} = 'login.tt2';
}

do_login.loginメソッドはAuthentication::Credential::Passwordで用意されています

sub do_login : Local {
    my ( $self, $c ) = @_;
    my $username = $c->req->param('username') || '';
    my $password = $c->req->param('password') || '';

    if($username && $password) {

        if($c->login($username, $password)) {
            $c->res->redirect($c->uri_for('/hoge'));
            return;
        }
        else {
            $c->stash->{error_msg} = 'Bad username or Password';
        }

    }

    $c->stash->{template} = 'login.tt2';
}

微妙だけどlogin.tt2も

[% IF error_msg %]
<div class="error_info">
<ul>
<li>[% error_msg %]</li>
</ul>
</div>
[% END %]

<form action="/do_login" method="post">
  username:<br />
  <input name="username" type="text" value="" /><br />
  password:<br />
  <input name="password" type="password" /></br />
  <input type="submit" value="login" /><br />
</form>

logout.現状そんなに意味はないけど

sub logout : Local {
    my ( $self, $c ) = @_;
    $c->logout;

    $c->res->redirect($c->uri_for('/'));
}

ログインが成功すれば/hogeにリダイレクト,失敗したら戻る.とりあえず認証自体はできるようになった.あとはpasswordなどの暗号化,sessionとAuthenticationの連携をやる必要がある

[][]Session::FastMmap Session::FastMmap - LAPISLAZULI HILL#Catalyst を含むブックマーク はてなブックマーク - Session::FastMmap - LAPISLAZULI HILL#Catalyst Session::FastMmap - LAPISLAZULI HILL#Catalyst のブックマークコメント

Catalyst::Plugin::Session::FastMmap - search.cpan.org

Remedies Wisdom

このあたりを参考にひとまず単体で使うだけやってみる

myApp.yml

session:
  expires: 3600
  rewrite: 0
  storage: '/tmp/session'

expiresの値はyamlで設定するなら数値で指定する必要があるみたい.たとえば60 * 60のような書き方ではダメでした


myApp.pm

use Catalyst qw/
    ...
    Session::FastMmap
/;

と設定.あとは適当なContorllerで

    $c->session->{hoge} = 'hoge';

とセットしてやって,別のところで

    my $hoge = $c->session->{hoge};

などとして呼び出せる

これだけでもcookieにsessionidが保存される

[debug] Found sessionid "munyamunya" in cookie
[debug] Found session "munyamunya"

あとはexpiresの値を調整したりして動作を確認してみた.expiresが過ぎればsessionidが発行し直されます

トラックバック - http://catalyst.g.hatena.ne.jp/lapis25/20061108