
Djangoのミドルウェアを作ってみました。すごく簡単でした。デバッグモードで実行していると、右上に「アナログ」と表示します。まぁ、あれです。ミドルウェアというのは、入出力をいじくったりすることができる拡張機能です。簡単な例だと、ケータイ向けにコンテンツを編集する、というのもミドルウェアを作ることで実現できます。Djangoだと、クラスを一つ作り、いくつかメソッドを定義してやるだけで簡単に作れます。
まずソースコードですが、こんな感じです。デバッグモードかどうかを見て、デバッグモードだったら、</body>タグを見つけて、その前にタグを挿入します。手抜きプログラムですが、本当なら、文字コードを見て変更するコードは必要になると思います。
# -*- encoding: utf-8 -*- import settings analog = """<div style="position:absolute;top:0;right:0;color:#fff;filter:alpha(opacity=50);opacity:0.5;font-size:1.5em;font-weight:900;">アナログ</div></body>""" class AnalogMiddleware(object): def __init__(self): self.is_show = settings.DEBUG def process_response(self, request, response): if not self.is_show: return response if "text/html" in response["Content-Type"]: response.content = response.content.replace("</body>", analog) return response
組み込みは簡単。ソースコードをsettings.pyのミドルウェアのリストに追加します。これでおしまい。
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'gtdd.analog.AnalogMiddleware' )
簡単すぎて不思議なぐらい。今はテンプレートでHTMLを作成するのはサーバの内部に実装するけど、jsonやXMLだけをサーバで作って、ミドルウェアで可視化する、というのも面白そうです。色々アイディアが浮かんできますね!認証エンジンを追加したり、というのもやっている人がいますね。写真の顔部分にモザイクをかけたり、とかミドルウェアでページの色を変えてしまうとか・・・役に立たなそうですが。誰か、すべてを昭和レトロにするミドルウェアとか作ってくれないかなぁ・・・
Railsも3になるとDjangoみたいにプラガブルなミドルウェアが作れるようになるらしい。Railsも開発モードとかテストモードとか、そういうのを表示するのを作るといいかもね。