Source
Tornadoを使ったアプリ構成
1つ以上のRequestHandlerのサブクラス
1つのApplicationオブジェクト
1つのメイン関数で構成される。
RequestHandlerサブクラス
大抵のハンドラはRequestHandlerを継承して作る。HTTPメソッドに対応したget()、post()などを定義しておく。render()をtemplateの読み込みのために用意しておく。write()はtemplateを使わないoutput用。
Appicationオブジェクト
requestHandlerへのルーティング処理を行う。Application()の引数にurl()リストを渡す。
app = Application([
url(r"/", MainHandler),
url(r"/story/[0-9]+", StoryHandler, dict(db=db), name="story")
])
Request handling
現在のリクエスト内容はself.requestないのフィールドで確認できる。Request中のデータはget_query_argument(), get_body_argument()から取り出せる。
class myHandler(tornado.web.RequestHandler):
def post(self):
self.set_handler("Content-Type", "text/plain")
self.write(sefl.get_body_argument("message"))
JSONをform-encodingの代わりに使いたい時は、prepare()メソッドをオーバーライドする。
Error handling
ハンドラが例外を発生した時、TornadoはRequestHandler.write_errorを呼び、エラーページを返す。write_error()の代わりに、set_status()を呼んでも良い。
404エラーのために、default_handler_classが使える。
Redirection
2つやり方がある。
"RequestHandler.redirect" or "RedirectHandler"
Applicationのルートテーブルにrul(r"/app", RedirectHandler, dict(url="xxx"))で直接設定する。"xxx"には正規表現も使える。
Asynchronous handlers
get(), post()などのメソッドはこルーチンとしてオーバーライドできる。
async def get(self): ... response = await xxx