Djangoバージョン0.96リリースノート—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/releases/0.96
移動先:案内検索

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

Django 0.96へようこそ!

0.96の主な目標は、0.95で導入された機能のクリーンアップと安定化です。 0.95以降、後方互換性のない小さな変更がいくつかありますが、アップグレードプロセスはかなり単純であり、既存のアプリケーションに大きな変更を加える必要はありません。

ただし、近い将来、下位互換性のない一連の変更が予定されているため、現在0.96もリリースしています。 完了すると、アプリケーション開発者向けのコード変更が含まれるため、次の公式リリースまでDjango0.96を使用することをお勧めします。 そうすれば、Djangoの開発バージョンに対応するために段階的な変更を加える必要がなく、1つのステップでアップグレードできるようになります。

後方互換性のない変更

以下の変更により、0.95から0.96に切り替えるときにコードを更新する必要がある場合があります。

MySQLdbバージョン要件

古いバージョンのMySQLdb Pythonモジュール(DjangoがMySQLデータベースへの接続に使用)のバグのため、DjangoのMySQLバックエンドにはバージョン1.2.1p2以降のMySQLdbが必要になり、古いバージョンを使用しようとした場合の例外。

現在、この要件を満たすためにMySQLdbのコピーをアップグレードできない場合は、「mysql_old」と呼ばれる別の下位互換性のあるバックエンドがDjangoに追加されています。 このバックエンドを使用するには、Django設定ファイルのDATABASE_ENGINE設定を次のように変更します。

DATABASE_ENGINE = "mysql"

これに:

DATABASE_ENGINE = "mysql_old"

ただし、MySQLユーザーはできるだけ早くMySQLdbの最新バージョンにアップグレードすることを強くお勧めします。「mysql_old」バックエンドはこの移行を容易にするためにのみ提供されており、非推奨と見なされます。 必要なセキュリティ修正を除いて、アクティブに維持されることはなく、Djangoの将来のリリースで削除される予定です。

また、新しい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(ビュー、ストアドプロシージャ、 NS。)。
  • 痕跡の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の新機能

このリビジョンは、1,000を超えるソースコミットと400を超えるバグ修正を表しているため、すべての変更をカタログ化することはできません。 ここでは、このリリースで最も注目すべき変更点について説明します。

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

django.newformsは、Djangoの新しいフォーム処理ライブラリです。 これは、古いフォーム/マニピュレーター/検証フレームワークであるdjango.formsの代替品です。 どちらのAPIも0.96で利用できますが、次の2つのリリースでは、完全に新しいフォームシステムに切り替え、古いシステムを廃止して削除する予定です。

この移行には3つの要素があります。

  • 現在のdjango.formsdjango.oldformsにコピーしました。 これにより、後方互換性のない変更を待って、事後にコードを急いで修正するのではなく、コードをアップグレードできます。 インポートステートメントを次のように変更するだけです。

    from django import forms             # 0.95-style
    from django import oldforms as forms # 0.96-style
  • Djangoの次の公式リリースでは、現在のdjango.newformsdjango.formsに移動します。 これは後方互換性のない変更であり、その時点でまだ古いバージョンのdjango.formsを使用している場合は、上記のようにインポートステートメントを変更する必要があります。

  • その後の次のリリースでは、django.oldformsが完全に削除されます。

newformsライブラリは進化し続けますが、ほとんどの一般的なケースですぐに使用できます。 フォーム処理に不慣れな人は、古いフォームシステムをスキップして、新しいフォームシステムから始めることをお勧めします。

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


URLconfの改善

URLconfのコールバックとして任意のcallableを使用できるようになりました(以前は、callableを参照する文字列のみが許可されていました)。 これにより、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)
)

デコレータを使用する場合、これの1つの便利なアプリケーションを見ることができます。 この変更により、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に謝罪します)。 doctestまたはunittestに基づいてテストを記述し、簡単なテストクライアントでビューをテストできます。

「フィクスチャ」の新しいサポートもあります。これは、サポートされているシリアル化形式のいずれかで保存され、テストの開始時にデータベースにロードされる初期データです。 これにより、実際のデータを使用したテストがはるかに簡単になります。

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


管理インターフェースの改善

小さな変更ですが、非常に優れています。ユーザーを追加および更新するための専用ビューが管理インターフェースに追加されたため、管理者でハッシュ化されたパスワードを操作することを心配する必要がなくなりました。


ありがとう

0.95以降、多くの人々が前進し、Djangoの開発において大きな新しい役割を果たしてきました。 これらの人々の懸命な努力に感謝します。

  • RussellKeith-MageeとMalcolmTredinnickの主要なコード貢献。 このリリースは、それらなしでは不可能でした。
  • 私たちの新しいリリースマネージャーであるJamesBennettは、0.95.1、0.96、そして(願わくば)将来のリリースを発表することに尽力してくれました。
  • チケットマネージャーのChrisBeaven(別名SmileyChris)、Simon Greenhill、Michael Radziej、GaryWilson。 彼らは、私たちのチケットをうまくカタログ化された提出物にまとめるという記念碑的な仕事を引き受けることに同意しました。 何に取り組むべきかを理解することは、今では約百万倍簡単です。 みんなありがとう。
  • バグレポート、パッチ、またはチケットコメントを提出したすべての人。 名前ですべての人に感謝することはできません。200人を超える開発者が0.96のパッチを提出しましたが、Djangoに貢献したすべての人が:source: `AUTHORS` にリストされています。