Google AppEngine で Django 1.1 を使う

2009/12/03 12:42pm

Google AppEngine の SDK および実行環境には、Web アプリケーション・フレームワークの Django がプリインストールされている。

しかし、デフォルトで有効になっているのは 0.96 という相当古いバージョンだ(もっとも、Google AppEngine リリース時点では、これが最新のバージョンであった)。すでにサポートも終了しており、バグや脆弱性の修正もされないため、できれば最新の 1.0/1.1系列を使いたい、という人が大半だろう。

しかし、これまで、バージョン 1.0 以降の Django を Google AppEngine で使うのは骨の折れる作業だった。

だが、いまや状況は変わった。SDK 1.2.3 からは Django 1.0 が、SDK 1.2.5 からは Django 1.1 がサポートされ、Google AppEngine でも、簡単に Django 1.x を動かせるようになった。

google.appengine.dist.use_library

SDK 1.2.3/1.2.5 からは google.appengine.dist モジュールの use_library 関数を使うことで Django 1.0/1.1 を選択できるようになった。

使い方は簡単で、main.py に以下のような記述を追加するだけだ。

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from google.appengine.dist import use_library
use_library('django', '1.1')

これまで開発者が各自行っていた sys.path の調整は use_library 関数がやってくれる。

更に嬉しいことに、Django のコードをアップロードする必要もなくなった。Google AppEngine のサーバには Django 1.0/1.1 がインストールされている。ただし、SDK には Django 0.96 しか添付されていないので、1.0/1.1 を使う場合は、あらかじめローカルのマシンに Django 1.0/1.1 をインストールしておこう。

Django のバージョンと DoS 攻撃可能な脆弱性について

なお、実際に有効になる Django の詳細なバージョンは、本記事執筆時点の 2009 年 11 月で以下のようになっている(django.VERSION で調べた)。

use_library Django version
(None) 0.96.4
use_library(1.0) 1.0.2
use_library(1.1) 1.1.0

残念ながら、1.0/1.1 は DoS 攻撃可能な脆弱性が修正されたバージョン ではないようだ(修正バージョンは 1.0.4/1.1.1)。

この脆弱性は EmailFieldURLField に関連したものなので、それらを使っているプログラムでは Google AppEngine にインストールされた Django のアップデートを待つか、これまでどおりの方法で、修正済みのバージョンをアップロードした方が安全だろう。

Note

Google AppEngine プロジェクトに報告したところ、GAE で有効になるバージョンは修正済みのものである、とのこと。失礼しました。

main.py のサンプル

実際に use_library を使ったサンプルを gist:245523 で公開している。