ミドルウェアは大まかに言うと、「ビューをコールする直前と直後にフックを入れることができる機能」です。従って、全てのビューにある特定のテンプレート変数を追加・変更したり、共通の処理を追加することが可能です。 ミドルウェアを追加する場合、
- ミドルウェアクラスを新規作成
- ミドルウェアクラスをsettings.pyに登録
$ emacs settings.py
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | MIDDLEWARE_CLASSES = ( ..., 'hoge_app.middlewares.hookfunc', ) # 次に、実態 hookfunc クラスを実装します。 $ emacs hoge_app/middlewares.py class hookfunc(): def __init__(self): pass def process_request(self, request): """ どのviewを実行するか決定する前にコールされるフック。 """ return request # ここで処理終了 def process_view(self, request, view_func, view_args, view_kwargs): """ 実行されるviewが決定した後にコールされるフック。 """ return response # ここで処理終了 def process_response(self, request, response): """ viewを実行した後に呼びだされるフック。 """ return response # ここで処理終了 |
ミドルウェアクラスでは、予めI/Fとして定義されている
- process_request(self, request)
- process_view(self, request, view_func, view_args, view_kwargs)
- process_response(self, request, response)
をオーバーライドすることで、実行されるタイミングが決定されます。
また、返り値としてNoneを返すと次のミドルウェアクラスのハンドラを実行し、 requestオブジェクトやresponseオブジェクトを返すと、そこで処理が完了するといった処理を実現することも可能です。