rayphe - 軽量Python web framework

  • 2010-2-10: v0.3.0リリースしました。またプロジェクト名を変更しています。

ちょっと前にRubyでSinatraが取り上げられて、結構注目されたように思います。ということはRailsだと大げさすぎるなあ、と思うような場合に対する需要というのはやっぱりそれなりにあるんですよね。

Pythonで軽量、というとweb.pyが一番有名ですよね。他にはJunoBottleなんかがあります。

このブログで使っているのはweb.pyです。結構昔から使っています。が、不満もおおくweb.pyを拡張するようなライブラリを作っていて、それがそこそこの量あったりします。

そこで、これくらい量があるなら自分でフレームワーク作っても大してかわんなくね?と思い始めました。あれ、そういえば俺、テンプレートエンジンもつくっちゃってるじゃん、簡易O/Rマッパも自分用につくってあるじゃん、と次々に気づき始め、それらをまとめて作っちゃいました。軽量フレームワーク。

rayphe

「rayphe」はPython用軽量ウェブフレームワークです。ルーティング、テンプレート、O/Rマッパなどが1ファイルにまとめられていて、依存するライブラリもありません。

また、共通の処理をまとめる「フィルタ」があったり、やアプリケーションの各フェーズをフックできたりと柔軟です。

raypheはGitHubにおいてあります。それなりにドキュメントも書いていて、テストもしてあります。詳しくは以下をどうぞ。

たとえば、サンプルアプリのコードの一部はこんな感じです。

python code
  1. with app.filter([context_setup_filter, {"except":["static_file"]}]):
  2.   @app.get("static/(unicode:.*)")
  3.   def static_file(c, path):
  4.     c.res.send_file(os.path.join(app.static_path, path.replace("..", "")))
  5.  
  6.   @app.get("")
  7.   def index(c):
  8.     c.res.redirect(app.url.show_pages())
  9.  
  10.   @app.get("page/(int:\d+)")
  11.   def show_page(c, page_id):
  12.     c.page = app.db.select_one_by_id(Page, page_id)
  13.     c.title += c.page.title
  14.     c.comments = app.db.select([Comment],
  15.       cond="page_id=? order by created_at asc",
  16.       values=[page_id])
  17.     c.comment = getattr(c, "comment", Comment(name="", body=""))
  18.     return app.renderer.show_page({"c":c})
  19.  

という感じでわかりやすくかけます。また、「単純化しすぎない」ということにも気を使っていたりします。selfと書くのが好きなPythonistaらしく、status 404とかじゃなくc.res.notfound()です。

というわけで

Pythonで小さなウェブアプリをつくるときは是非。

03.02.10/04am

About

Author:yuin(http://inforno.net/)

文学部文化学科卒という生粋の文系趣味プログラマ。

主にRuby、Javascript、PHP、JAVA,Python,C,Scala,Schemeなどを使っています。今はPythonな感じかもしれない。今後作曲活動なども復活するかもしれない。

Pages