概要
この記事はPythonフレームワークの一つであるFalconの扱い方についてまとめた記事です。今回の記事は前回のその2になります。
Falconは非常にシンプルな構成であり、多機能では無いもののいくつかの機能を備えています。
今回はリクエストパラメーターの取得
方法とHooks
という機能の扱い方について解説します。
パラメーターの取得
GETやPOSTのリクエストを受けた際、パラメーターの取得は以下のようにして行えます。
class AppResource(object):
def on_get(self, req, resp):
params = req.params
resp.body = json.dumps(params)
req.params
でパラメーターの取得を行うことができます。
例えば以下のようなGETパラメーターを指定してリクエストを送ったとします。
以下の場合はkeyがtestであり、valueがhogeになります。
- key: test
- value: hoge
$ curl -v 127.0.0.1:8000?test=hoge
シェルのHTTPクライアントはcurlを使うのが一般的ですが、HTTPieの方が便利です。
HTTPieの扱い方は以下に載せてあります。
https://qiita.com/ytabuchi/items/02fa15ac209823a4d19f
$ http -v GET 127.0.0.1:8000 test==hoge
実際にコマンドを叩いてリクエストを送ってみると、req.params
の中身は以下のような感じになっています。中身は辞書型となっているため、req.params['test']
でキーを指定するとvalueであるhoge
を取り出すことが可能です。
{'test': 'hoge'}
Hooksの機能
Hooksは指定した__リソースの前後に任意の処理を追加できる__ことの機能です。
リソースのクラス、又はメソッドに以下のデコレーターを指定することでHooksを使うことができます。Hooksには以下のように2種類のデコレーターがあります。
- @falcon.before 指定したリソースの直前で呼び出される
- @falcon.after 指定したリソースの直後に呼び出される
実装例
それでは実際にHooksを使用してみます。前回作成したapp.pyに追記していきます。
.
.
(省略)
import hooks.py
@falcon.before(hooks.before_resource)
@falcon.after(hooks.after_resource)
class AppResource(object):
def on_get(self, req, resp):
msg = {
"message": "Welcome to the Falcon"
}
resp.body = json.dumps(msg)
Hooks用のメソッドを定義したファイルを作成します。
ここではAppResource
クラスに対して処理が飛ぶと、AppResource
が呼び出される前にデコレーター@falcon.beforeで指定したhooks.py
のbefore_resource
メソッドが呼び出されます。
その後、AppResource
内で処理が行われた後に、デコレーター@falcon.afterで指定したhooks.py
内のafter_resource
メソッドに処理が飛びます。
def before_resource(req, resp, resource, params):
print('hook: before_resource')
print(req)
print(resp)
print(resource)
print(params)
def after_resource(req, resp, resource):
print('hook: after_resource')
print(req)
print(resp)
print(resource)
処理の順番
つまり処理の順番は上から以下のようになります。
- (falcon.before) before_resource
- (Resource) AppResource (on_****) on_get
- (falcon.after) after_resource
まとめ
今回紹介したのは以下の二つです。
- パラメーターの取得方法
- リソースの前後に任意の処理を挟むことができる機能
次回はミドルウェアの機能について紹介していきます。