2009年01月29日

「Djangoミドルウェア作ってみた」

「アナログ」

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も開発モードとかテストモードとか、そういうのを表示するのを作るといいかもね。

posted by @shibukawa at 00:00 | Comment(160) | TrackBack(0) | Python はてなブックマーク - 「Djangoミドルウェア作ってみた」
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26078479

この記事へのトラックバック
検索ボックス

Twitter

www.flickr.com
This is a Flickr badge showing public photos and videos from shibukawa.yoshiki. Make your own badge here.
<< 2019年02月 >>
          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    
最近の記事
カテゴリ
過去ログ
Powered by さくらのブログ