「ディージャンゴ」じゃないよ「ジャンゴ」だよ。
Googleも使ってるPythonのフレームワークで、優秀なadmin機能が標準装備されていたり、テンプレートの継承ができたりします。
僕もDjangoに(露木さんに?)インスパイアされてテンプレートの継承っぽいことができるTTのプラグイン書いて、FlipClipで使ってます。

・予価:2,940円(税込)
・B5変型判 272ページ
・ISBN978-4-8399-2466-9
・発売日:2008年01月29日
■内容紹介
YouTubeやニコニコ動画など、最近のWebサービスでは動画共有サービスが大人気です。その多くのサイトで、動画投稿時の変換に利用されているのがオープンソースの動画変換ソフト(エンジン)「FFmpeg」です。
FFmpegは、様々な動画・音声形式の変換に対応しており、動画共有サービス立ち上げの際に必須の技術ですが、これまでまとまった解説書がありませんでした。本書は、動画共有サイトの開発を日常的に行っている著者による、FFmpegを利用して動画共有サービスを構築するための技術解説書になります。
本書では、動画に関する基本的な解説から、FFmpegのインストールや使い方、Perl、PHP、Python、Javaの4つのプログラム言語での利用方法、字幕を入れられるFlashを使った動画プレイヤーの制作方法、Pythonを使った動画共有サイトの構築まで、サンプルを交えて解説します。本書で解説するのは、比較的小規模での動画共有サイトの作り方となりますが、サーバサイドの工夫次第では、大規模な動画共有サイトにも発展させることも可能です。
動画共有サイトの開発環境は多岐に渡り、本書はそのエッセンスをまとめたもので、すべての環境や手順は解説してません。また、本書の開発環境は、著者が日常的に利用している環境で、必ずしも一般的な環境ではないかもしれません。ただ、実際に動画共有サイト構築のために、著者自身が試行錯誤しながら身につけた知識や技術は、FFmpegを利用した動画共有サイト構築の際に、必ず参考になると考えています。
著者:原一浩・寺田学・本間雅洋・足立健誌・堀内康弘・堀田直孝・月村潤・尾花衣美
<
mysqldump --default-character-set=latin1 -uroot --all-databses > db.dump
<
perl -pi -e 's/latin1/utf8/' db.dump
<
--- Sledge/Pages/Base.pm.orig 2006-11-25 00:40:59.000000000 +0900
+++ Sledge/Pages/Base.pm 2006-11-25 09:27:50.000000000 +0900
@@ -8,6 +8,9 @@
use strict;
use base qw(Class::Accessor Class::Data::Inheritable);
+use vars qw($MethodQueryKey);
+$MethodQueryKey = '_method';
+
__PACKAGE__->mk_accessors(
'r', # Apache::Request or Sledge::Request::CGI
'session', # Sledge::Session
@@ -81,10 +84,16 @@
eval {
$self->init_dispatch($page);
$self->invoke_hook('BEFORE_DISPATCH') unless $self->finished;
- if ($self->is_post_request && ! $self->finished) {
+ if ( $self->is_put_request && ! $self->finished) {
+ my $putmeth = 'put_dispatch_' . $page;
+ $self->$putmeth() if $self->can($putmeth);
+ } elsif ( $self->is_delete_request && ! $self->finished) {
+ my $deletemeth = 'delete_dispatch_' . $page;
+ $self->$deletemeth() if $self->can($deletemeth);
+ } elsif ($self->is_post_request && ! $self->finished) {
my $postmeth = 'post_dispatch_' . $page;
$self->$postmeth() if $self->can($postmeth);
- }
+ }
unless ($self->finished) {
my $method = 'dispatch_' . $page;
$self->$method();
@@ -188,6 +197,16 @@
return $self->r->method eq 'POST';
}
+sub is_put_request {
+ my $self = shift;
+ return ($self->r->method eq 'PUT' || ($self->r->method eq 'POST' && lc($self->r->param($MethodQueryKey)) eq 'put'));
+}
+
+sub is_delete_request {
+ my $self = shift;
+ return ($self->r->method eq 'DELETE' || ($self->r->method eq 'POST' && lc($self->r->param($MethodQueryKey)) eq 'delete'));
+}
+
sub make_content {
my $self = shift;
# template output, then fillin forms
<
package MyProj::Pages::Items;
use strict;
use base qw(MyPfoj::Pages);
sub dispatch_index {
my $self = shift;
my $item_id = int $self->r->param('id');
if ( $item_id ){
# アイテム単体を返すコードを記述
} else {
# アイテムリストを返すコードを記述
}
}
sub post_dispatch_index {
my $self = shift;
# アイテムを追加するコードを記述
}
sub put_dispatch_index {
my $self = shift;
# アイテムを更新するコードを記述
}
sub delete_dispatch_index {
my $self = shift;
# アイテムを削除するコードを記述
}