- 2010-2-10: v0.3.0リリースしました。またプロジェクト名を変更しています。
ちょっと前にRubyでSinatraが取り上げられて、結構注目されたように思います。ということはRailsだと大げさすぎるなあ、と思うような場合に対する需要というのはやっぱりそれなりにあるんですよね。
Pythonで軽量、というとweb.pyが一番有名ですよね。他にはJuno、Bottleなんかがあります。
このブログで使っているのはweb.pyです。結構昔から使っています。が、不満もおおくweb.pyを拡張するようなライブラリを作っていて、それがそこそこの量あったりします。
そこで、これくらい量があるなら自分でフレームワーク作っても大してかわんなくね?と思い始めました。あれ、そういえば俺、テンプレートエンジンもつくっちゃってるじゃん、簡易O/Rマッパも自分用につくってあるじゃん、と次々に気づき始め、それらをまとめて作っちゃいました。軽量フレームワーク。
rayphe
「rayphe」はPython用軽量ウェブフレームワークです。ルーティング、テンプレート、O/Rマッパなどが1ファイルにまとめられていて、依存するライブラリもありません。
また、共通の処理をまとめる「フィルタ」があったり、やアプリケーションの各フェーズをフックできたりと柔軟です。
raypheはGitHubにおいてあります。それなりにドキュメントも書いていて、テストもしてあります。詳しくは以下をどうぞ。
たとえば、サンプルアプリのコードの一部はこんな感じです。
with app.filter([context_setup_filter, {"except":["static_file"]}]):@app.get("static/(unicode:.*)")def static_file(c, path):c.res.send_file(os.path.join(app.static_path, path.replace("..", "")))@app.get("")def index(c):c.res.redirect(app.url.show_pages())@app.get("page/(int:\d+)")def show_page(c, page_id):c.page = app.db.select_one_by_id(Page, page_id)c.title += c.page.titlec.comments = app.db.select([Comment],cond="page_id=? order by created_at asc",values=[page_id])c.comment = getattr(c, "comment", Comment(name="", body=""))return app.renderer.show_page({"c":c})
という感じでわかりやすくかけます。また、「単純化しすぎない」ということにも気を使っていたりします。selfと書くのが好きなPythonistaらしく、status 404とかじゃなくc.res.notfound()です。
というわけで
Pythonで小さなウェブアプリをつくるときは是非。