BottleのTODOチュートリアルが動かない件と対処方法

PythonのWebアプリケーションフレームワークBottleですが、公式ドキュメントのチュートリアル(Tutorial: Todo-List Application — Bottle 0.13-dev documentation)にあるサンプルコードを実行しようとするとエラーが出て実行する事ができません。
エラーは以下の通りです。

Traceback (most recent call last):
File "todo.py", line 2, in
from bottle import route, run, debug, template, request, validate, static_file, error
ImportError: cannot import name validate

ドキュメントを見る限り validate は現在のバージョンのBottleには存在しないようです。おそらく、v0.1.0からリクエストルーティングの部分でエスケープが可能になる以前に使われていたものだと思われます。
現在のバージョンではリクエストルーティングの部分で<no:int>のようにデータ型を指定します。

修正しよう

サンプルコードを実行するためには以下の修正が必要になります。
①import文
todo.py 2行目のimport部分からvalidateを削除
修正前

from bottle import route, run, debug, template, request, validate, static_file, error

修正後

from bottle import route, run, debug, template, request, static_file, error

②リクエストルーティング
40行目の@validateを削除し、39行目のリクエストルーティングの部分でエスケープさせる
修正前

@route('/edit/:no', method='GET')
@validate(no=int)

修正後

@route('/edit/<no:int>', method='GET')

これでtodo.pyが正常に実行できるようになります。

リクエストルーティングを推奨されている形に直す

チュートリアルのtodo.pyは現在のバージョンで非推奨とされている形式でリクエストルーティングの部分を書いています。この機会に直しておきましょう。
と、言いたいところなんですが、このサンプルコードには結構複雑な問題があるのでこの話はまた後日ということで....

おまけ:todo.pyのURL構造

http://localhost:8080/todo
TODOリストの一覧
http://localhost:8080/new
新規TODOの追加
http://localhost:8080/edit/{no}
TODOの編集
http://localhost:8080/item{no}
TODOの個別表示
http://localhost:8080/json{no}
TODOの個別表示(JSON形式)

さらなるおまけ:トップページで一覧を表示できるようにする

サンプルコードではhttp://localhost:8080/todoにアクセスしないとTODOの一覧が表示できません。もし、http://localhost:8080/で表示したい場合には7行目の
@route('/todo')
の前に
@route('/')
を追加しましょう。
修正前

@route('/todo')

修正後

@route('/')
@route('/todo')

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>