2009-06-24

Djangoで携帯サイト向けサイトを作るためにuamobileを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
pythonで携帯サイトを作るためには、uamobileが便利なわけです。
SOBARCOでもuamobileは使っているのですが、ちょっとバージョンが古く、今では結構変更されていました。

そして今度は、Djangoで利用できるようしてみたのでその手順です。

Djangoの環境作成は、ココをごらんください。

まずuamobileを以下から取得します。
http://pypi.python.org/pypi/uamobile/
今回は、0.2.5を利用しています。
取得したファイルを解凍してできたディレクトリにあるuamobileディレクトリをDjangoプロジェクトのルートディレクトリの直下にコピーします。

uamobileではIPyというのも使っているようなので取得します。
http://pypi.python.org/pypi/IPy
今回は、0.63を利用しています。
取得したファイルを解凍してできたディレクトリにあるIPy.pyをDjangoプロジェクトのルートディレクトリの直下にコピーします。

私の環境ではuamobile/cidr.pyの先頭をコメントアウトしないいけませんでした。
#from pkg_resources import resource_string


これで使う準備が整いました。

せっかくDjangoで利用するのでmiddlewareとしてどのページを見るときでも勝手にサイトを見ている端末を判別できるようにします。

Djangoプロジェクトの直下にcommonディレクトリを作成します。
commonディレクトリに内容が空の__init__.pyファイルを作ります。
また、以下のmiddleware.pyを作成します。
from uamobile import detect

class UserAgentMobileMiddleware(object):
def process_request(self, request):
request.device = detect(request.META)

こちらは、http://labs.unoh.net/2007/08/python_3.htmlを参考にさせていただきました。

そしてsetting.pyのMIDDLEWARE_CLASSESに
'common.middleware.UserAgentMobileMiddleware',
を追加します。

ちゃんと動いている確認します。
Dyangoプロジェクト直下で
python manage.py startapp myapp
を実行します。

そしてsetting.pyのINSTALLED_APPSにmyappを追加する。

myapp/view.pyを以下のように編集する。
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response

def index(request):
payload = dict()
payload['docomo'] = request.device.is_docomo()
payload['au'] = request.device.is_ezweb()
payload['softbank'] = request.device.is_softbank()
payload['pc'] = request.device.is_nonmobile()
return render_to_response('index.html', payload)


テンプレートも準備します。templates/index.htmlを以下のように編集します。
<html>
<head>
<title>test</title>
</head>
<body>
aaa<br>
docomo:{{docomo}}<br>
au:{{au}}<br>
sofubank:{{softbank}}<br>
pc:{{pc}}<br>
</body>
</html>


urls.pyを以下のように変更する。
urlpatterns = patterns('myapp.views',
(r'^$', 'index'),
)


ここまで準備できたらrunserverでhttp://localhost:8000/にいろんな端末でアクセスしてみることで端末判別が行われていることがわかります。
携帯サイトのテストには、FirefoxのアドオンであるFireMobileSimulatorがむちゃむちゃ便利です。

ちょっとまとめるとDjangoの環境とは別にここまで追加したものは以下のような感じです。
Djangoルート
|-uamobile
|-IPy.py
|-common
| |-__init__.py
| |-middleware.py
|-myapp
| |-views.py
|-templates
|-index.html

コメントを投稿