Bottleチュートリアルの問題点

化学実験器具ファスナーフック付きミニチュアマスコット(丸底フラスコ)AT032001
BottleのTODOアプリチュートリアルにはいくつかの問題があります。
まず、validate関連の問題(参考:BottleのTODOチュートリアルが動かない件と対処方法)
この部分は修正しないとプログラムが動作しないという非常に深刻な問題です。

その他の問題点

その他にも様々な問題点があります。しかし、チュートリアルの問題であってbottle.pyの問題ではない点、チュートリアルを改善することでユーザーが技術力を高められるように配慮してある可能性を考慮して…というのは嘘で、僕にはGitを扱う能力がないので、プルリクエストなどはせず、概要をずらっと並べてみたいと思います。誤りの指摘やさらなる問題点の発見などは、ぜひぜひコメントかTwitterにお願いします。
①リクエストルーティング
リクエストルーティングの部分がv0.1.0以降の新形式ではなく、非推奨となっている形式で書かれています。公式ドキュメントで非推奨な書き方をしているのはちょっと…

@route('/item:item#[0-9]+#')
...
@route('/json:json#[0-9]+#')

@route('/<item:re:[0-9]+>')
...
@route('/<json:re:[0-9]+>')

とするべきです。
②2桁問題
TODO項目のIDが2桁の数になると/itemや/jsonが動かなくなります。エラーメッセージによると、execute()の第2引数がタプル型になっていないのが原因のようです。以下のように、","を追加する事で問題は解決されます。

c.execute("SELECT task FROM todo WHERE id LIKE ?", (item))

↓","を追加(/jsonも同様)

c.execute("SELECT task FROM todo WHERE id LIKE ?", (item,))

しかし、なぜIDが1桁のときはタプル型でなくても動くのでしょう?
③謎のstr()
62行目にはstr(no)という記述があります。

c.execute("SELECT task FROM todo WHERE id LIKE ?", (str(no)))

しかし、72行目や91行目ではstr()を使っていません。

c.execute("SELECT task FROM todo WHERE id LIKE ?", (item))

関数に渡されるデータ型が違うのでしょうか?そんなはずはないと思うのですが...

とりあえず今のところはこの3つですね。

コメントを残す

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

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