プログラミング

Responderの使い方まとめ【Responder v1.3.1】

Responder

Responder

ResponderとはPythonで利用可能なWebAPIフレームワークです.

公式の最新情報やチュートリアルは  A familiar HTTP Service Framework です.

現在注目されているResponderですが,あまりにも情報が少なすぎるのが現状です.

日本語で紹介しているページもありますが,公式チュートリアルを和訳したものばかりです.

しかし,とある事情で私自身がResponderを使わなければいけなくなり,色々と調査をし,結果として手に入れた知識をこの記事で紹介します.

ネットの情報をかき集めた部分と,ソースを見て「なるほどこういうことか!」と判明した部分が入り混じっています.

参考までに...

ちなみにResponderはPython3.6以降でないと動作しません.

また,本記事を書いている段階ではResponderのバージョンは1.3.1です.

ローカルサーバの立ち上げとルーテイング

ローカルサーバの立ち上げは,チュートリアルに載っている通り.

以下のコードが最低限あればOKです.

もし上記のコードが書いてあるファイルをrun.pyとするならば,

でOKです.

そして,ルーテイングは

のようにします.

が,

こういう風に書いていくと,run.pyひとつのファイルに書かなければいけなくなってしまいます.

ファイルを分けよう

スマートにコードを書くために,また管理しやすいようにファイルは用途によって分けるのが普通です.

なので分けます.

例えば,run.pyはサーバ立ち上げ用にします.

そして新たに,ルーティング専用のurls.py,各ルーテイングの処理専用のcontrollers.pyと分けます.

そうすると,以下のように書けます.

run.py

urls.py

controllers.py

 

この方がスマートです.

Jinja2のフィルタを追加する

jinja

ResponderではHTMLの生成をJinja2というテンプレートエンジンを使用しています.

Responderでは,Jinja2の環境はAPIクラスの jinja_env というメンバ変数が持っています.

なので,もしフィルタを追加したければ,

このように書きます.

そうするとテンプレート側では,

のようにパイプを使って書けます.

Jinja2のグローバル変数を追加する

これも先ほどのフィルタとやることは似ています.

辞書型の環境変数 globals に追加するだけです.

テンプレート側では,

のように書きます.




ログイン,ログアウト処理

Responderでのログインおよびログアウト処理はResponderのResponseクラスが持つSessionとCookieを用います.
(該当ファイル: Responder.models.py)

Sessionにログインユーザーを登録する

セッションは辞書型変数ですので,

のような形で良いです.

Cookieにログインユーザを登録する

ResponderではPythonのSimpleCookieクラスを使っており,ResponderのResponseクラスには set_cookie() という関数が用意されているのでそれを使います.

先の関数には引数として,

などを取ります.(上記は引数の一部で,他にもあります)

ログイン時には,

のようにします.

ログアウト処理

ログアウトは先のSessionとCookieを破棄すれば良いだけです.

404エラーハンドリング

Responderの問題はこれです.

エラーハンドリングがデフォルトではできないようです.(v1.3.1)

他の方が書いた記事も参照しましたが,スマートに解決する方法はなさそうです.

参考:
Responderにはエラーハンドリング機能がない?
responderで理解するWebサーバー #2 ルーティング

そこで僕が思いついた一番簡単な方法は,Responderのソースをいじる方法です.

ソースをいじるのはナンセンスかもしれませんが,これが一番簡単です(多分).

まずいじるのは,Responderのapi.pyのAPIクラス.

その494行目あたりにある, default_response() です.

以下のように修正します.

これで,テンプレートの404.htmlに全てリダイレクトされ,素っ気ない「Not Found.」とはおさらばです.

まとめ

Responderを少し触ってみた感想としては,シンプルで無駄がなく好きです.

Responderの強みは非同期処理にあると思いますが,僕はまだうまい使い方を模索中です.

PythonのWebフレームワークはDjangoが有名ですが,まったく系統が異なり,どちらかというとFlaskに近いです.

DjangoのようなアプリをResponderでも作れますが,少し大変でしょう.

また,Responderを学べば,勝手にSQLAlchemyなどのPythonのデータベース管理フレームワークやJinja2の知識が同時についてきます

なのでオススメです.

ブラックボックス化したフレームワークは便利ですが,プログラミングの勉強には不向きなので...

と,まあ色々とつらつら書きましたが,まだResponderは発展途上で,今後もアップデートが期待できます.

エラーハンドリングなんかは,いずれもっと扱いやすくなるのではないでは,と思います.

みなさんもこれを機にResponder触ってみてください.


スポンサードリンク