Django v1.0 documentation

Django バージョン 0.96 リリースノート

revision-up-to:8961 (1.0)

Django 0.96 の世界へようこそ!

Django 0.96 の主な目標は、 0.95 で採り入れられた機能に対するクリーンアップ と安定化にあります。 0.96 には、 0.95 以前のバージョンと 互換性のない変更 がわずかにありますが、 アップグレードは簡単で、既存のアプリケーションもとくに大きな変更なく動作す るはずです。

とはいえ、 0.96 のリリースには、今後取り込まれる予定の一連の互換性のない変 更に備えるという意味もあります。これらの変更を適用した後には、アプリケーショ ン開発者は自分のコードを多少変更せねばならなくなるでしょう。ですから、次の 公式リリースまでは 0.96 を使い続けるよう勧めます。そうすれば、開発バージョ ンの Django に変更が取り込まれる度に少しづつコードをいじるのではなく、一ス テップでアップグレードできるようになるからです。

互換性のない変更

以下の変更によって、 0.95 から 0.96 に乗り換える際にコードを更新する必要が あります:

MySQLdb バージョンの制約

MySQLdb モジュール (Django が MySQL データベースにアクセスするために使っ ているバックエンド) の古いバージョンのバグを回避するため、 Django の MySQL バックエンドはバージョン 1.2.1p2 またはそれ以降の MySQLdb を要求するよ うになり、それ以前のバージョンを使おうとすると例外を送出するようになりまし た。

現状でこの制約に適合するように MySQLdb のバージョンを上げられない場合、 以前のバージョンと互換性のあるバックエンド mysql_old を使ってください。 このバックエンドを使うには、 DATABASE_ENGINE の設定を、これまで の:

DATABASE_ENGINE = "mysql"

から:

DATABASE_ENGINE = "mysql_old"

に変更してください。

とはいえ、 MySQL ユーザにはできるだけ最新の MySQLdb にアップグレードす るよう強く勧めます。 mysql_old バックエンドは移行を簡単にするだけのため に存在しており、撤廃対象とみなされています。必要なセキュリティフィクスを除 き、ほとんどメンテナンスされることはなく、将来のバージョンで削除される予定 です。

また、 DATABASE_OPTIONS のような設定 (詳細は データベースのドキュメント を参照してください) は、 "mysql" バックエンド でのみ利用でき、 "mysql_old" では使えません。

データベース名の制約に関する変更

Django が外部キー参照を生成するときに使う制約名が少し変更されました。 通常、制約名はカラムに対する参照を直接行えない場合にのみ使われるので、 ユーザの目に触れることはありません。

この変更の影響として、 manage.py reset や同様のコマンドを既存のデータベー スに対して実行すると、新たな制約名の形式で SQL を生成する一方、データベース 本体には以前の形式の制約名が存在するという問題が生じ、このためにデータベー スサーバが実在しない制約に対する変更が行われたというエラーメッセージを送出 する場合があります。

この問題を回避するには 2 通りの方法があります:

  1. manage.py * の出力をファイルにリダイレクトし、生成された SQL を編集して正しい制約名に直してから実行します。
  2. manage.py sqlall の出力から新たな制約名がどうなっているかを調べ て、データベース上の既存の制約名を変更する手がかりにします。

manage.py のオプション名変更

フィクスチャのサポートのために、 manage.py のオプションのうち、いくつか を変更しました:

  • dumpdata および loaddata コマンドが追加されました。これらのコ マンドは、それぞれデータベースに対してデータをダンプしたりロードした りするためのコマンドです。このコマンドは、 Django のサポートする全て のシリアライズ形式を扱えます。
  • sqlinitialdata コマンドは、 sqlcustom に名称変更しました。こ れは、データ関係の操作は loaddata を使うべきであることを強調する 意味もあります (sqlcustom はビューやストアドプロシジャなどのカ スタム SQL 定義に使ってください)。
  • 以前のバージョンの名残であった install コマンドを除去しました。 アプリケーションのインストールには syncdb を使ってください。

バックスラッシュのエスケープに関する変更

Django のデータベース API はクエリパラメタとして渡されたバックスラッシュを エスケープするようになりました。既存のデータベース API まわりのコードにバッ クスラッシュが入っていて、これまでは (エスケープがなくても) ちゃんと動作し ていたのなら、 1 レベル分「エスケープを外し」ておかねばなりません。

例えば、以前は以下のコードがちゃんと動作していたとします:

# Find text containing a single backslash
MyModel.objects.filter(text__contains='\\\\')

このコードは、今後は以下のように書かねばなりません:

# Find text containing a single backslash
MyModel.objects.filter(text__contains='\\')

ENABLE_PSYCO 設定の除去

ENABLE_PSYCO 設定はなくなりました。設定ファイルに ENABLE_PSYCO を加 えても、何も起きません。 Psyco を有効にしたければ、ミドルウェアクラスを自作 してください。

0.96 の新しい機能

Django 0.96 は 1000 以上の新規コミットと、 400 以上のバグフィクスの結果です。 全ての変更を一覧にするのは不可能なので、主要な変更点だけを説明します。

新しいフォームライブラリ

新たなフォーム処理ライブラリ django.newforms が導入されました。このライ ブラリは旧来のフォーム/マニピュレータ/バリデーションフレームワークである django.forms への置き換えにあたります。 0.96 ではどちらの API も使えま すが、今後の 2 バージョンのリリースの中で新たなフォームシステムに完全に移行 し、旧来のシステムは撤廃、除去する予定です。

新たなフォームライブラリへの移行のポイントは 3 つあります:

  • 現在の django.forms の実体は django.oldforms にコピーしました。 これで、互換性のない変更を座して待つことなく、 今すぐ コードの修正 に取り掛かれます。修正は、各アプリケーションのコードを以下のように書 き換えるだけです:

    from django import forms             # 0.95 スタイル
    from django import oldforms as forms # 0.96 スタイル
    
  • 次の Django の公式リリースで、現在の django.newformsdjango.forms に移動します。これは互換性のない変更なので、以前の django.forms を使い続けたい人は、上記に従って import 文を変更する 必要があります。

  • さらに次のリリースで、 django.oldforms を完全に除去します。

newforms ライブラリは現在も改良が続いていますが、すでに一般的な利用に耐 える状態です。Django でのフォーム処理に入門する人は、旧来のフォームを学ぶの はやめて、新たなフォームから学び始めましょう。

django.newforms の詳細は newforms のドキュメント を参照してください。

URLconf の改良

URLconf のコールバックに呼出し可能オブジェクトを使えるようになりました (以 前は呼出し可能オブジェクトの Python パス表記名を表す文字列しか指定できませ んでした)。この改良により、URLconf をより直感的に書けるようになりました。 例えば、以下の URLconf:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    ('^myview/$', 'mysite.myapp.views.myview')
)

は、以下のように書けるようになりました:

from django.conf.urls.defaults import *
from mysite.myapp.views import myview

urlpatterns = patterns('',
    ('^myview/$', myview)
)

呼出し可能オブジェクトを指定できるようになった利点の一つに、デコレータを使 えるようになったことがあります。 URLconf の中で ビューにデコレータを適用 できるのです。これを使えば、ログインの必要な汎用ビューをとても簡単に書けま す:

from django.conf.urls.defaults import *
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list
from mysite.myapp.models import MyModel

info = {
    "queryset" : MyModel.objects.all(),
}

urlpatterns = patterns('',
    ('^myview/$', login_required(object_list), info)
)

どちらの表記方法 (文字列と呼出し可能オブジェクト) も指定方法としては有効で、 当面は混在して利用できます。

テストフレームワーク

ついに Django にテストフレームワークが導入されました。 (テストファーストの 推進者 Kent Beck には悪いですが) これで、「心配を退屈な作業に」変えられます。 テストは doctestunittest を使って作成でき、簡単なテストクライアントを使った ビューのテストもできます。

また、「フィクスチャ」のサポートも追加されました。フィクスチャは Django の サポートする シリアライゼーション形式 で保存された初 期データで、テストの開始時に自動的にデータベースにロードされます。フィクス チャによって、実際のデータを使ったテストが一層簡単になります。

詳しくは テストのドキュメント を参照してください。

admin インタフェースの改良

ユーザの追加や更新のための専用のビューが admin インタフェースに追加されまし た。これはちょっとした、でもとても素晴らしい変更です。というのも、 admin で ハッシュパスワードを扱わなくてよくなったからです。

謝辞

0.95 以後、何人もの人達が進み出て、 Django の開発における主要な役割を果たす ようになりました。ここに彼らの尽力に対して謝意を表します:

  • Russell Keith-Magee と Malcolm Tredinnick は多くのコードに寄与してい ます。 0.96 のリリースは彼らなしでは実現しませんでした。
  • 新たなリリースマネジャ、 James Bennett は、 0.95.1 や 0.96, のリリー スを推進してくれました。(そしておそらく将来のリリースでもお世話にな ることでしょう。)
  • チケットマネジャ Chris Beaven (通称 SmileyChris), Simon Greenhill, Michael Radziej, Gary Wilson に感謝します。彼らは全てのチケットの世話 をして、カタログ化するという偉大な仕事をなしとげました。そのおかげで、 どのチケットに注力すべきかを決める作業が 1000000 倍にも楽になりました。 ほんとうにありがとう。
  • バグ報告、パッチ、そしてチケットへのコメントを提出してくださった皆さ んにも感謝します。0.96 に取り込まれたパッチの作者は 200 名以上にもの ぼるので、全ての人の名前を挙げるのは無理ですが、名前を AUTHORS に掲 載させていただきました。