あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

PythonでさくっとwebAPIを立てる(falconを使う)

画面なんて作るから構築に時間がかかるんだ!(極論)
※なお、良心がタイトルを「まだテンプレートで消耗しているの?」にさせなかった模様。

Pythonの有名ドコロwebフレームワークは、
どれもデフォルトでテンプレート機能が用意されています。
(対してORMはDjangoくらいだったりする)

今回紹介するFalconはそのテンプレート機能すらも捨て去った漢モジュールです。

最近のスマホアプリや、javascriptによるフロントMVCの攻勢を見ると、
テンプレートはなくても良いんじゃないかと思うことがあります。

そうなるとtornadoやDjangoは少々大げさすぎる感じはするので、
サーバサイドをScrapy + mongodb + データ集計+Falconで組んで、
フロントはスマホアプリやJSに完全に任せてしまうという構成もありなきがします。

使い方

pipでいれて

pip install falcon

こんな風に書くだけ

import json
import falcon

class HelloResource(object):
    def on_get(self,req,resp):
        msg={"message":"hello,falcon"}
        resp.body = json.dumps(msg)

app = falcon.API()
app.add_route("/",HelloResource())

if __name__ == "__main__":
    from wsgiref import simple_server
    httpd = simple_server.make_server("127.0.0.1",8000,app)
    httpd.serve_forever()

アクセスするとjsonが帰ってきます。

hook機能

デコレータでフックと呼ばれる追加機能をたせます。

def hook_func(req,resp,resource,param)
    print "this is hook"

@falcon.before(hook_func)
def on_get(self,req,resp)
    pass

@falcon.beforeを用いると、アクセス時に先に
この関数を走らせることができます。
(同様に@falcon.afterを用いると、終了後に実行されるようです)

とこんな感じで、新しいサーバサイドの構成を考えています。
tinydbやmongodbを組み込めば、dbの中身をそのまま返せますね。

tinydbの使い方は以下をどうぞ。 esu-ko.hatenablog.com