Django1.10リリースノート
2016年8月1日
Django 1.10へようこそ!
これらのリリースノートには、の新機能と、Django1.9以前のバージョンからアップグレードするときに注意が必要な後方互換性のない変更が含まれています。 非推奨サイクルの終わりに達したいくつかの機能を削除し、いくつかの機能の非推奨プロセスを開始しました。
既存のプロジェクトを更新する場合は、 Djangoを新しいバージョンにアップグレードするガイドを参照してください。
Pythonの互換性
Django 1.9と同様に、Django1.10にはPython2.7、3.4、または3.5が必要です。 強くお勧めします。各シリーズの最新リリースのみを公式にサポートします。
Django1.10の新機能
PostgreSQLの全文検索
django.contrib.postgres
には、データベース関数のコレクションが含まれるようになり、全文検索エンジンを使用できるようになりました。 リレーショナルデータベースの複数のフィールドを検索したり、検索を他のルックアップと組み合わせたり、さまざまな言語構成と重み付けを使用したり、関連性によって結果をランク付けしたりできます。
:lookup: `trigram_similar` ルックアップ、および TrigramSimilarity および TrigramDistance 式を使用した、トリグラムのサポートも含まれるようになりました。
新しいスタイルのミドルウェア
../../topics/http/middleware DEP 0005 で説明されている古いスタイルのミドルウェアの厳密な要求/応答階層化の欠如を解決するために、新しいスタイルのミドルウェアが導入されました。 改善を利用するには、古いカスタムミドルウェアを適応し、MIDDLEWARE_CLASSES
設定から新しい:setting: `MIDDLEWARE` 設定に切り替える必要があります。
Unicodeユーザー名の公式サポート
django.contrib.auth
の User モデルは、元々、ユーザー名にASCII文字と数字のみを受け入れていました。 意図的な選択ではありませんでしたが、Python3を使用する場合は常にUnicode文字が受け入れられてきました。
ユーザー名バリデーターは、Python3でのみデフォルトでUnicode文字を明示的に受け入れるようになりました。
カスタムユーザーモデルは、新しい ASCIIUsernameValidator または UnicodeUsernameValidator を使用できます。
マイナーな機能
django.contrib.admin
- サブパスで実行されているサイトの場合、各管理ページの上部にある[サイトの表示]リンクのデフォルトの URLは、設定されている場合、
/
ではなく、request.META['SCRIPT_NAME']
を指すようになります。 ]。 - オブジェクトを追加または編集した後に表示される成功メッセージに、オブジェクトの変更フォームへのリンクが含まれるようになりました。
- 必要に応じて
Content-Security-Policy
HTTPヘッダーを有効にできるように、すべてのインラインJavaScriptが削除されています。 - 新しい InlineModelAdmin.classes 属性を使用すると、インラインフィールドセットでクラスを指定できます。
collapse
クラスのインラインは最初に折りたたまれ、ヘッダーには小さな「表示」リンクがあります。 - ユーザーに追加権限がない場合、モデルのチェンジリストの
object-tools
ブロックがレンダリングされるようになりました(もちろん、追加ボタンはありません)。 これにより、この場合、カスタムツールを簡単に追加できます。 - LogEntry モデルは、変更メッセージをJSON構造に格納するようになり、現在のアクティブな言語を使用してメッセージを動的に翻訳できるようになりました。 新しい
LogEntry.get_change_message()
メソッドが、変更メッセージを取得するための推奨される方法になりました。 ModelAdmin.raw_id_fields
のフィールドで選択されたオブジェクトに、オブジェクトの変更フォームへのリンクが追加されました。- フィールドがnull許容の場合、
DateFieldListFilter
に「日付なし」と「日付あり」の選択肢を追加しました。 - adminに埋め込まれたjQueryライブラリがバージョン2.1.4から2.2.3にアップグレードされます。
django.contrib.auth
- Argon2パスワードハッシュのサポートが追加されました。 PBKDF2よりも推奨されますが、サードパーティのライブラリが必要なため、デフォルトではありません。
- PBKDF2パスワードハッシャーのデフォルトの反復回数が25%増加しました。 この下位互換性のある変更は、
django.contrib.auth.hashers.PBKDF2PasswordHasher
をサブクラス化してデフォルト値を変更したユーザーには影響しません。 django.contrib.auth.views.logout()
ビューは、Safariがリダイレクトをキャッシュし、ユーザーがログアウトできないという問題を防ぐために、「キャッシュなし」ヘッダーを送信します。- オプションの
backend
引数を django.contrib.auth.login()に追加して、資格情報なしで使用できるようにしました。 - 新しい:setting: `LOGOUT_REDIRECT_URL` 設定は、ビューが
next_page
引数を取得しない場合に、django.contrib.auth.views.logout()
ビューのリダイレクトを制御します。 django.contrib.auth.views.login()
ビューの新しいredirect_authenticated_user
パラメーターを使用すると、ログインページにアクセスする認証済みユーザーをリダイレクトできます。- 新しい AllowAllUsersModelBackend と AllowAllUsersRemoteUserBackend は、
User.is_active
の値を無視しますが、 ModelBackend と RemoteUserBackend は非アクティブなユーザーを拒否するようになりました。
django.contrib.gis
- 距離ルックアップは、距離値パラメーターとして式を受け入れるようになりました。
- 新しい GEOSGeometry.unary_union プロパティは、このジオメトリのすべての要素の和集合を計算します。
- GEOSGeometry.covers()バイナリ述語を追加しました。
- GDALBand.statistics()メソッドと mean および std 属性を追加しました。
- SpatiaLiteの MakeLine アグリゲートと GeoHash 関数のサポートが追加されました。
- MySQLの Difference 、 Intersection 、および SymDifference 関数のサポートが追加されました。
- 空のGEOSジオメトリをインスタンス化するためのサポートが追加されました。
- WKTWriter の新しい trim および precision プロパティを使用すると、WKTの座標の小数部分の出力を制御できます。
- LineString.closed および MultiLineString.closed プロパティが追加されました。
- GeoJSONシリアライザーは、特定のフィールドが指定されていない場合、
properties
ディクショナリ内のオブジェクトの主キーを出力するようになりました。 - GDALBand.data()メソッドで入力データを複製する機能が追加されました。 バンドデータを繰り返し値で効率的に更新できるようになりました。
- すべてPostGIS用のデータベース関数 IsValid と MakeValid 、および:lookup: `isvalid` ルックアップを追加しました。 これにより、データベース側で無効なジオメトリをフィルタリングおよび修復できます。
- すべての空間ルックアップのラスターサポートが追加されました。
django.contrib.staticfiles
- :ttag: `static` テンプレートタグは、
INSTALLED_APPS
にある場合、django.contrib.staticfiles
を使用するようになりました。 これは、({% load staticfiles %}
または{% load static from staticfiles %}
の代わりに)常に{% load static %}
を使用でき、staticfiles
かどうかを気にしないサードパーティアプリで特に役立ちます。 ]アプリがインストールされています。 - カスタム
AppConfig
を使用すると、 [[Django/docs/2.2.x/ref/contrib/staticfiles#customize-staticfiles-ignore-patterns|]]collectstatic --ignore
オプションをより簡単にカスタマイズできます。
キャッシュ
- ファイルベースのキャッシュバックエンドは、最高のピクルスプロトコルを使用するようになりました。
CSRF
- デフォルトの:setting: `CSRF_FAILURE_VIEW` 、
views.csrf.csrf_failure()
は、オプションのtemplate_name
パラメーターを受け入れ、デフォルトで'403_csrf.html'
になり、レンダリングに使用されるテンプレートを制御します。ページ。 - BREACH 攻撃から保護するために、CSRF保護メカニズムは、リクエストごとにフォームトークン値を変更するようになりました(さまざまなトークンの検証に使用できる不変のシークレットを保持します)。
データベースバックエンド
- 時間データの減算は、すべてのバックエンドで統合されました。
- データベースがサポートしている場合、バックエンドは
DatabaseFeatures.can_return_ids_from_bulk_insert=True
を設定し、DatabaseOperations.fetch_returned_insert_ids()
を実装して、QuerySet.bulk_create()
を使用して作成されたオブジェクトに主キーを設定できます。 - データベースバックエンドが
self
を変更せずにカスタマイズします。これは、異なるデータベースバックエンドを使用する場合は安全ではありません。 例については、 Func.as_sql()のarg_joiner
および**extra_context
パラメーターを参照してください。
ファイルストレージ
- ストレージバックエンドは、新しいメソッド get_accessed_time()、 get_created_time()、および get_modified_time()を備えたタイムゾーン対応APIを提供するようになりました。 :setting: `USE_TZ` が
True
の場合は、タイムゾーン対応のdatetime
を返し、それ以外の場合は、ローカルタイムゾーンでナイーブなdatetime
を返します。 - 新しい Storage.generate_filename()メソッドを使用すると、以前 FileField で
os.path
呼び出しを使用しなかったカスタムストレージを簡単に実装できます。
フォーム
- フォームとウィジェット
Media
は、インストールされている場合、 django.contrib.staticfiles を使用して提供されるようになりました。 - CharField によってレンダリングされた
<input>
タグには、フィールドにmin_length
がある場合、minlength
属性が含まれるようになりました。 - 必須のフォームフィールドに
required
HTML属性が追加されました。 新しい Form.use_required_attribute 属性をFalse
に設定して、無効にします。required
属性は、フォームセットを追加および削除するときにブラウザーの検証が正しくない可能性があるため、フォームセットのフォームには含まれていません。
国際化
- i18n_patterns()ヘルパー関数は、 request.urlconf を使用して指定されたルートURLConfで使用できるようになりました。
- i18n_patterns()の新しい
prefix_default_language
パラメーターをFalse
に設定すると、URLプレフィックスなしでデフォルト言語にアクセスできるようになります。 - set_language()は、
POST
またはGET
にnext
パラメーターがない場合に、AJAXリクエストに対して204ステータスコード(コンテンツなし)を返すようになりました。 - JavaScriptCatalog および JSONCatalog クラスベースのビューは、非推奨の
javascript_catalog()
およびjson_catalog()
関数ベースのビューに取って代わります。 新しいビューは、デフォルトで:setting: `LOCALE_PATHSからのJavaScript文字列だけでなく、インストールされているすべてのアプリからdjangojs
翻訳ドメイン内のすべてのJavaScript文字列を収集することを除いて、古いビューとほぼ同じです。 `。
管理コマンド
- call_command()は、
command.handle()
メソッドから返された値を返すようになりました。 - 新しい
check --fail-level
オプションを使用すると、コマンドをゼロ以外のステータスで終了させるメッセージレベルを指定できます。 - 新しい
makemigrations --check
オプションは、移行なしのモデル変更が検出されたときに、コマンドをゼロ以外のステータスで終了させます。 - :djadmin: `makemigrations` は、生成する移行ファイルへのパスを表示するようになりました。
shell --interface
オプションは、python
を受け入れて、「プレーンな」Pythonインタープリターの使用を強制するようになりました。- 新しい
shell --command
オプションを使用すると、インタラクティブシェルを開く代わりに、コマンドをDjangoとして実行して終了できます。 - 具体的な親なしでプロキシモデルが指定されている場合(出力がない場合)、:djadmin: `dumpdata` に警告を追加しました。
- :djadmin: `runserver` のようにコマンドで警告を出力する場合は、新しい BaseCommand.requires_migrations_checks 属性を
True
に設定できます。ディスク上の移行の数がデータベース内の移行と一致しません。 - テストを支援するために、 call_command()は最初の引数としてコマンドオブジェクトを受け入れるようになりました。
- :djadmin: `shell` コマンドは、
libedit
を使用するシステムでのタブ補完をサポートします。 マックOS。 - :djadmin: `inspectdb` コマンドを使用すると、引数として名前を指定することにより、検査するテーブルを選択できます。
移行
enum.Enum
オブジェクトのシリアル化のサポートが追加されました。- RunSQL および RunPython 操作に
elidable
引数を追加して、移行を潰すときにそれらを削除できるようにしました。 Migration
にatomic
属性を設定することにより、非アトミックマイグレーションのサポートが追加されました。migrate
およびmakemigrations
コマンドは、一貫した移行履歴をチェックするようになりました。 適用された移行の適用されていない依存関係が見つかった場合、InconsistentMigrationHistory
が発生します。- pre_migrate()および post_migrate()シグナルは、移行
plan
およびapps
をディスパッチするようになりました。
モデル
- プロキシモデルからの逆外部キーは、具象クラスに伝播されるようになりました。 プロキシモデルを指す ForeignKey によってアタッチされた逆の関係は、プロキシモデルクラスの記述子としてアクセスできるようになり、クエリセットフィルタリングで参照できるようになりました。
- 新しい Field.rel_db_type()メソッドは、別のフィールドを指す
ForeignKey
やOneToOneField
などのフィールドのデータベース列データ型を返します。 - arity クラス属性が Func に追加されました。 この属性を使用して、関数が受け入れる引数の数を設定できます。
1
から9223372036854775807
までの数値に適合することが保証されていることを除いて、 AutoField とほぼ同じように機能する BigAutoField を追加しました。- QuerySet.in_bulk()は、クエリセット内のすべてのオブジェクトを返すために引数なしで呼び出すことができます。
- related_query_name は、
'%(app_label)s'
および'%(class)s'
文字列を使用したアプリラベルおよびクラス補間をサポートするようになりました。 - 抽象基本クラスから継承されたモデルフィールドのオーバーライドを許可しました。
- prefetch_related_objects()関数がパブリックAPIになりました。
- QuerySet.bulk_create()は、PostgreSQLを使用するときにオブジェクトの主キーを設定します。
- Cast データベース機能を追加しました。
- プロキシモデルは、共通の非抽象親クラスを共有する複数のプロキシモデルを継承できるようになりました。
- 日時コンポーネントを年や時間などの整数として抽出する Extract 関数が追加されました。
- 日付または日時を重要なコンポーネントに切り捨てるための Trunc 関数が追加されました。 1日あたりの売上や1時間あたりの売上などのクエリを有効にします。
Model.__init__()
は、キーワード引数から仮想フィールドの値を設定するようになりました。- 新しい Meta.base_manager_name および Meta.default_manager_name オプションを使用すると、それぞれ _base_manager および _default_manager を制御できます。
リクエストとレスポンス
request.user
をデバッグビューに追加しました。- HttpResponse メソッド読み取り可能()および seekable()を追加して、インスタンスをストリームのようなオブジェクトにし、
io.TextIOWrapper
でラップできるようにしました。 CONTENT_TYPE
ヘッダーから解析される HttpRequest.content_type および content_params 属性が追加されました。request.COOKIES
のパーサーは、ブラウザーの動作によりよく一致するように簡略化されています。request.COOKIES
には、 RFC 6265 に従って無効なCookieが含まれる可能性がありますが、document.cookie
を介して設定できます。
シリアル化
django.core.serializers.json.DjangoJSONEncoder
は、通常、翻訳可能なコンテンツに使用されるレイジー文字列をシリアル化する方法を認識しました。
テンプレート
autoescape
オプションを DjangoTemplates バックエンドと Engine クラスに追加しました。is
およびis not
比較演算子を:ttag: `if` タグに追加しました。- :tfilter: `dictsort` が、指定されたインデックスの要素ごとにリストのリストを並べ替えることができるようになりました。
- debug()コンテキストプロセッサには、デフォルトのエイリアスだけでなく、すべてのデータベースエイリアスのクエリが含まれています。
- :ttag: `extends` および:ttag:` include` テンプレートタグの文字列引数の相対パスサポートが追加されました。
テスト
- バグをより適切にキャッチするために、 TestCase は、各テストの最後に延期可能なデータベース制約をチェックするようになりました。
- テストとテストケースは、タグでマークされ、新しい
test --tag
およびtest --exclude-tag
オプションで選択的に実行できます。 - django.contrib.sessions が:setting: `INSTALLED_APPS` にない場合でも、ログインしてテストクライアントでセッションを使用できるようになりました。
URL
- django.setup()に追加すると、要求/応答サイクルの外で発生するURL解決が可能になります(例: 管理コマンドおよびスタンドアロンスクリプトで)設定時に:setting: `FORCE_SCRIPT_NAME` を考慮に入れます。
バリデーター
- URLValidator は、 RFC 1034 ごとに、ドメイン名ラベルの長さを63文字に制限し、ドメイン名の全長を253文字に制限するようになりました。
- int_list_validator()は、オプションの
allow_negative
ブールパラメーターを受け入れるようになりました。デフォルトはFalse
で、負の整数を許可します。
1.10での後方互換性のない変更
警告
このセクションで概説されている変更に加えて、1.10 で削除された機能で、非推奨サイクルの終わりに達したために削除された機能を確認してください。 特定の機能の非推奨タイムライン内にコードを更新しなかった場合、その削除は後方互換性のない変更として表示される場合があります。
データベースバックエンドAPI
- GISの
AreaField
は、実際には任意の数値Python型である可能性がある、指定されていない基になる数値型を使用します。 データベースから取得したdecimal.Decimal
値がfloat
に変換されるようになり、GISライブラリで使用される値と簡単に組み合わせることができるようになりました。 - 時間減算を有効にするには、
supports_temporal_subtraction
データベース機能フラグをTrue
に設定し、DatabaseOperations.subtract_temporals()
メソッドを実装する必要があります。 このメソッドは、 DurationField の格納に使用されるデータ型のlhs
引数とrhs
引数の差をマイクロ秒単位で計算するために必要なSQLとパラメーターを返す必要があります。
_meta.get_fields()は、プロキシモデルの一貫したリバースフィールドを返します
Django 1.10より前は、 get_fields()メソッドは、プロキシモデルで呼び出されたときに、プロキシされた具象クラスと比較して異なるリバースフィールドを返していました。 この不整合は、どちらの場合も具象クラスまたはそのプロキシの1つを指すフィールドの完全なセットを返すことで修正されました。
AbstractUser.username max_length increased to 150
django.contrib.auth.models.User.username の移行が含まれています。 AbstractUser
から継承するカスタムユーザーモデルがある場合は、ユーザーモデルのデータベース移行を生成して適用する必要があります。
電子メールアドレス(254文字に制限されている)をユーザー名としてより簡単に使用できるようにするために、254文字に増やすことを検討しましたが、MySQLの制限のために拒否しました。 utf8mb4
エンコーディング(適切なUnicodeサポートに推奨)を使用する場合、MySQLはデフォルトで191文字の一意のインデックスしか作成できません。 したがって、より長い長さが必要な場合は、カスタムユーザーモデルを使用してください。
ユーザー名の30文字の制限を維持する場合は、ユーザーを作成するとき、またはユーザー名を変更するときにカスタムフォームを使用します。
from django.contrib.auth.forms import UserCreationForm
class MyUserCreationForm(UserCreationForm):
username = forms.CharField(
max_length=30,
help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.',
)
管理者でこの制限を維持したい場合は、次のフォームを使用するようにUserAdmin.add_form
を設定してください。
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
class UserAdmin(BaseUserAdmin):
add_form = MyUserCreationForm
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
PostgreSQL9.1のサポートを終了しました
PostgreSQL9.1のアップストリームサポートは2016年9月に終了します。 結果として、Django 1.10は、PostgreSQL9.2を公式にサポートする最小バージョンとして設定します。
runserver出力はロギングを通過します
runserver
コマンドの要求と応答の処理は、sys.stderr
ではなく django.server ロガーに送信されます。 Djangoのロギング構成を無効にするか、独自のロギング構成でオーバーライドする場合、その出力を表示するには、適切なロギング構成を追加する必要があります。
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[%(server_time)s] %(message)s',
}
},
'handlers': {
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
},
'loggers': {
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
}
}
auth.CustomUserおよびauth.ExtensionUserテストモデルが削除されました
Django 1.8でcontribアプリの移行が導入されて以来、これらのカスタムユーザーテストモデルのテーブルは作成されなくなり、テストコンテキストで使用できなくなりました。
Djangoの外部でモデルを選択解除するときに、Appsレジストリが自動入力されなくなりました
モデルの選択を解除するときに、アプリのレジストリが自動入力されなくなりました。 これは、django.setup()
を呼び出さずに、RQワーカーなどのDjangoの外部でモデルの選択を解除できるようにする試みとして、Django 1.7.2で追加されましたが、デッドロックの可能性があります。 RQの場合にコードを適合させるために、django.setup()
を呼び出す独自のワーカースクリプトを提供できます。
null以外の外部キーフィールドのnull割り当てチェックを削除しました
古いバージョンでは、None
をnull許容でないForeignKey
またはOneToOneField
に割り当てると、ValueError('Cannot assign None: "model.field" does not allow null values.')
が発生しました。 同様のチェックがない他のモデルフィールドとの一貫性を保つために、このチェックは削除されています。
デフォルトのPASSWORD_HASHERS設定から弱いパスワードハッシャーを削除しました
Django 0.90は、無塩のMD5としてパスワードを保存しました。 Django 0.91は、ユーザーがログインしたときにパスワードが自動的にアップグレードされるソルトSHA1のサポートを追加しました。 Django 1.4は、デフォルトのパスワードハッシャーとしてPBKDF2を追加しました。
MD5またはSHA1(ソルトされている場合でも)でエンコードされたパスワードを使用する古いDjangoプロジェクトがある場合、これらは今日のハードウェアでかなり簡単に解読される可能性があることに注意してください。 Djangoユーザーに弱いハッシャーの継続的な使用を認めさせるために、次のハッシャーがデフォルトの:setting: `PASSWORD_HASHERS` 設定から削除されています。
'django.contrib.auth.hashers.SHA1PasswordHasher'
'django.contrib.auth.hashers.MD5PasswordHasher'
'django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher'
'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher'
'django.contrib.auth.hashers.CryptPasswordHasher'
ラップされたパスワードハッシュを使用して、データベースのハッシュを強化することを検討してください。 それが不可能な場合は、:setting: `PASSWORD_HASHERS` 設定をプロジェクトに追加し、必要なハッシャーを追加し直します。
データベースに次のような削除されたハッシャーがあるかどうかを確認できます。
from django.contrib.auth import get_user_model
User = get_user_model()
# Unsalted MD5/SHA1:
User.objects.filter(password__startswith='md5$$')
User.objects.filter(password__startswith='sha1$$')
# Salted MD5/SHA1:
User.objects.filter(password__startswith='md5$').exclude(password__startswith='md5$$')
User.objects.filter(password__startswith='sha1$').exclude(password__startswith='sha1$$')
# Crypt hasher:
User.objects.filter(password__startswith='crypt$$')
from django.db.models import CharField
from django.db.models.functions import Length
CharField.register_lookup(Length)
# Unsalted MD5 passwords might not have an 'md5$$' prefix:
User.objects.filter(password__length=32)
Field.get_prep_lookup()およびField.get_db_prep_lookup()メソッドが削除されました
これらのメソッドのいずれかを実装するカスタムフィールドがある場合は、そのカスタムルックアップを登録します。 例えば:
from django.db.models import Field
from django.db.models.lookups import Exact
class MyField(Field):
...
class MyFieldExact(Exact):
def get_prep_lookup(self):
# do_custom_stuff_for_myfield
....
MyField.register_lookup(MyFieldExact)
django.contrib.gis
- SpatiaLite <3.0およびGEOS <3.3のサポートは終了しました。
django.contrib.gis.utils.add_srs_entry()
のadd_postgis_srs()
下位互換性エイリアスが削除されました。- Oracle / GISで、 Area 集計関数が
decimal.Decimal
ではなくfloat
を返すようになりました。 (それはまだ平方メートルのメジャーに包まれています。) - デフォルトの GEOSGeometry 表現(WKT出力)はデフォルトでトリミングされています。 つまり、
POINT (23.0000000000000000 5.5000000000000000)
の代わりに、POINT (23 5.5)
を取得します。
リクエスト本文の最大サイズとGET / POSTパラメータの数は制限されています
2つの新しい設定は、大規模なリクエストによるサービス拒否攻撃を軽減するのに役立ちます。
- :setting: `DATA_UPLOAD_MAX_MEMORY_SIZE` は、リクエスト本文のサイズを制限します。 ファイルのアップロードは、この制限にはカウントされません。
- :setting: `DATA_UPLOAD_MAX_NUMBER_FIELDS` は、解析されるGET / POSTパラメーターの数を制限します。
異常に大きなフォーム投稿を受け取るアプリケーションは、これらの設定を調整する必要がある場合があります。
その他
QuerySet
のrepr()
は、デバッグ時にプレーンリストから明確にするために<QuerySet >
でラップされます。utils.version.get_version()
は、 PEP 440 準拠のリリース候補バージョンを返します(例: 「1.10c1」ではなく「1.10rc1」)。- CSRFトークン値は、64文字の英数字の文字列である必要があります。 古いバージョンのDjangoでデフォルトで設定されている32文字の英数字の値は、64文字の文字列に自動的に置き換えられます。 他の値は無効と見なされます。 これは、これらのトークンを置き換える開発者またはユーザーにのみ影響します。
LOGOUT_URL
設定は、Djangoが1.0より前から使用していないため、削除されています。 プロジェクトで使用する場合は、プロジェクトの設定に追加できます。 デフォルト値は'/accounts/logout/'
でした。- HttpResponse に渡されるファイルやジェネレーターなど、
close()
メソッドを持つオブジェクトは、WSGIサーバーが応答でclose()
を呼び出すときではなく、すぐに閉じられるようになりました。 QuerySet.update_or_create()
の冗長なtransaction.atomic()
呼び出しが削除されます。 これは、TransactionTestCase.assertNumQueries()
によってテストされるクエリ数に影響を与える可能性があります。BaseCommand.execute(**options)
のskip_validation
のサポートが削除されました。 代わりにskip_checks
(Django 1.7で追加)を使用してください。- :djadmin: `loaddata` は、指定されたフィクスチャファイルが見つからない場合に警告を表示する代わりに、
CommandError
を発生させるようになりました。 LogEntry.change_message
属性に直接アクセスする代わりに、現在の言語でメッセージを提供するLogEntry.get_change_message()
メソッドを呼び出すことをお勧めします。- 存在しない
template_name
が指定されている場合、デフォルトのエラービューでTemplateDoesNotExist
が発生するようになりました。 Select
およびSelectMultiple
ウィジェットのrender()
メソッドの未使用のchoices
キーワード引数が削除されました。render_options()
メソッドのchoices
引数も削除され、selected_choices
が最初の引数になります。- 延期可能なデータベース制約に違反するテストは、延期可能な制約をサポートするデータベースで実行するとエラーになるようになりました。
- 組み込みの管理コマンドは、
options
のキーのインデックスを使用するようになりました。options.get()
の代わりにoptions['verbosity']
が使用され、型強制が実行されなくなりました。 これは、 call_command()の代わりにCommand.execute()
(デフォルト値を設定する引数パーサーをバイパスする)を使用してコマンドを呼び出す場合に問題になる可能性があります。Command.execute()
を呼び出す代わりに、コマンドオブジェクトを最初の引数としてcall_command()
に渡します。 - ModelBackend および RemoteUserBackend は非アクティブなユーザーを拒否するようになりました。 つまり、非アクティブなユーザーはログインできず、
is_active=True
からFalse
に切り替えるとログアウトされます。 以前の動作が必要な場合は、代わりに:setting: `AUTHENTICATION_BACKENDS` の新しい AllowAllUsersModelBackend または AllowAllUsersRemoteUserBackend を使用してください。 - 以前の変更に照らして、テストクライアントの login()メソッドは、非アクティブなユーザーを常に拒否するわけではなく、代わりにこの決定を認証バックエンドに委任します。 force_login()も決定を認証バックエンドに委任するため、デフォルトのバックエンドを使用している場合は、アクティブユーザーを使用する必要があります。
- django.views.i18n.set_language()は、AJAXリクエストに対して204ステータスコードを返す場合があります。
- RangeField の
base_field
属性は、フィールドのインスタンスではなく、フィールドのタイプになりました。 RangeField のカスタムサブクラスを作成した場合は、base_field
属性を変更する必要があります。 - ミドルウェアクラスは、最初の要求時ではなく、サーバーの起動時に初期化されるようになりました。
- カスタムユーザーモデルで
is_authenticated()
またはis_anonymous()
をオーバーライドする場合は、非推奨ノートの説明に従って、それらを属性またはプロパティに変換する必要があります。 - ModelAdmin.save_as = True を使用する場合、[新規として保存]ボタンは、モデルの変更リストではなく、新しいオブジェクトの変更ビューにリダイレクトされるようになりました。 以前の動作が必要な場合は、新しい ModelAdmin.save_as_continue 属性を
False
に設定します。 - 必須のフォームフィールドに
required
HTML属性が追加されました。 Form.use_required_attribute 属性をFalse
に設定して、無効にします。 ブラウザの検証が必要ない場合は、novalidate
属性を<form>
に追加することもできます。 カスタムウィジェットのrequired
属性を無効にするには、 Widget.use_required_attribute()メソッドをオーバーライドします。 - WSGIハンドラーは、
HEAD
要求またはstatus_code
が100-199、204、または304の応答から応答のコンテンツを削除しなくなりました。 ほとんどのWebサーバーは、すでにこの動作を実装しています。 Djangoテストクライアントを使用して取得された応答には、引き続きこれらの「応答修正」が適用されます。 Model.__init__()
は、遅延フィールドの値としてdjango.db.models.DEFERRED
を受け取るようになりました。QuerySet.defer()
を使用すると、動的モデルクラスとしてModel._deferred
属性が削除され、only()
が削除されます。- Storage.save()は、
'\'
を'/'
に置き換えなくなりました。 これはストレージ固有の実装の詳細であるため、この動作は FileSystemStorage に移動されます。 この動作に依存するカスタムストレージの実装を持つWindowsユーザーは、カスタムストレージのsave()
メソッドで実装する必要があります。 - プライベート FileField メソッド
get_directory_name()
およびget_filename()
は呼び出されなくなりました(現在は非推奨です)。これは、カスタムフィールドでこれらのメソッドをオーバーライドするユーザーにとって後方互換性のない変更です。 このようなコードを適応させるには、代わりにFileField.generate_filename()
または Storage.generate_filename()をオーバーライドします。 upload_to も使用できる場合があります。 AdminEmailHandler
によって送信されるメールの件名は、989文字で切り捨てられなくなりました。 限られた長さを頼りにしていた場合は、自分で主題を切り捨ててください。- プライベート式
django.db.models.expressions.Date
およびDateTime
は削除されました。 新しい Trunc 式は同じ機能を提供します。 _base_manager
および_default_manager
属性は、モデルインスタンスから削除されます。 それらはモデルクラスで引き続きアクセス可能です。- モデルインスタンスの削除されたフィールドへのアクセス。
del obj.field
の後、AttributeError
を上げる代わりに、フィールドの値をリロードします。 AbstractBaseUser
をサブクラス化し、clean()
をオーバーライドする場合は、必ずsuper()
を呼び出すようにしてください。 AbstractBaseUser.normalize_username()は、新しい AbstractBaseUser.clean()メソッドで呼び出されます。- プライベートAPI
django.forms.models.model_to_dict()
は、ManyToManyField
の主キーのリストではなく、クエリセットを返します。 django.contrib.staticfiles
がインストールされている場合、:ttag: `static` テンプレートタグは、値をSTATIC_ROOT
と単純に結合するのではなく、staticfiles
ストレージを使用してURLを構築します。 ]。 新しいアプローチはURLをエンコードします。これは、パスにフラグメントを含める場合など、後方互換性がない可能性があります。{% static 'img.svg#fragment' %}
、#
は%23
としてエンコードされているため。 適応するには、フラグメントをテンプレートタグの外側に移動します:{% static 'img.svg' %}#fragment
。- :setting: `USE_L10N` が
True
の場合、:tfilter:` date` および:tfilter: `time` [にローカリゼーションが適用されるようになりました。 X132X]は、フォーマット文字列が指定されていない場合にフィルタリングします。 同じ名前の設定の代わりに、アクティブなロケールのDATE_FORMAT
およびTIME_FORMAT
指定子が使用されます。
1.10で廃止された機能
逆外部キーまたは多対多関係への直接割り当て
直接割り当てを使用して関連オブジェクトを割り当てる代わりに:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set = new_list
Django1.9で追加された set()メソッドを使用します。
>>> e.related_set.set([obj1, obj2, obj3])
これにより、暗黙的な保存につながる割り当てに関する混乱を防ぐことができます。
タイムゾーンに対応しないストレージ API
古い、タイムゾーンに対応していないメソッドaccessed_time()
、created_time()
、およびmodified_time()
は非推奨になり、新しいget_*_time()
メソッドが優先されます。
サードパーティのストレージバックエンドは、新しいメソッドを実装し、古いメソッドを非推奨としてマークする必要があります。 それまでは、ベース Storage クラスの新しいget_*_time()
メソッドは、必要に応じて古いメソッドからdatetime
を変換し、そうすると非推奨の警告を発します。
サードパーティのストレージバックエンドは、以前のバージョンのDjangoをサポートしたい限り、古いメソッドを保持できます。
django.contrib.gis
- GEOSGeometry の
get_srid()
およびset_srid()
メソッドは非推奨になり、 srid プロパティが優先されます。 - Point [ X93X]は非推奨になり、
x
、y
、およびz
プロパティが優先されます。 - Point の
get_coords()
およびset_coords()
メソッドは非推奨になり、tuple
プロパティが優先されます。 - MultiPolygon の
cascaded_union
プロパティは非推奨になり、 unary_union プロパティが優先されます。 django.contrib.gis.utils.precision_wkt()
関数は非推奨になり、 WKTWriter が優先されます。
CommaSeparatedIntegerFieldモデルフィールド
CommaSeparatedIntegerField
は非推奨になり、 validate_comma_separated_integer_list()バリデーターで CharField が優先されます。
from django.core.validators import validate_comma_separated_integer_list
from django.db import models
class MyModel(models.Model):
numbers = models.CharField(..., validators=[validate_comma_separated_integer_list])
Oracleを使用している場合、CharField
はCommaSeparatedIntegerField
(VARCHAR2
)とは異なるデータベースフィールドタイプ(NVARCHAR2
)を使用します。 データベースの設定によっては、これは異なるエンコーディングを意味する場合があり、したがって同じコンテンツに対して異なる長さ(バイト単位)を意味する場合があります。 保存した値がNVARCHAR2
の4000バイト制限より長い場合は、代わりにTextField
(NCLOB
)を使用する必要があります。 この場合、フィールドでグループ化されたクエリがある場合(例: 集計でモデルに注釈を付けるか、distinct()
)を使用して、モデルを変更する必要があります(フィールドを延期するため)。
__searchクエリルックアップ
search
ルックアップは、MySQLのみをサポートし、機能が非常に制限されているため、非推奨になりました。 カスタムルックアップに置き換えます。
from django.db import models
class Search(models.Lookup):
lookup_name = 'search'
def as_mysql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return 'MATCH (%s) AGAINST (%s IN BOOLEAN MODE)' % (lhs, rhs), params
models.CharField.register_lookup(Search)
models.TextField.register_lookup(Search)
User.is_authenticated()およびUser.is_anonymous()をメソッドとして使用する
AbstractBaseUser および AnonymousUser クラスのis_authenticated()
およびis_anonymous()
メソッドがプロパティになりました。 これらはDjango2.0までメソッドとして機能しますが、Djangoでのすべての使用法は属性アクセスを使用するようになりました。
たとえば、 AuthenticationMiddleware を使用していて、ユーザーが現在ログインしているかどうかを知りたい場合は、次を使用します。
if request.user.is_authenticated:
... # Do something for logged-in users.
else:
... # Do something for anonymous users.
request.user.is_authenticated()
の代わりに。
この変更により、メソッドの呼び出しを忘れた場合の偶発的な情報漏えいを回避できます。例:
if request.user.is_authenticated:
return sensitive_information
カスタムユーザーモデルでこれらのメソッドをオーバーライドする場合は、プロパティまたは属性に変更する必要があります。
DjangoはCallableBool
オブジェクトを使用して、これらの属性がプロパティとメソッドの両方として機能できるようにします。 したがって、非推奨期間が終了するまで、is
演算子を使用してこれらのプロパティを比較することはできません。 つまり、以下は機能しません。
if request.user.is_authenticated is True:
...
django.utils.safestringの「エスケープ」半分
mark_for_escaping()
関数とそれが使用するクラス:EscapeData
、EscapeBytes
、EscapeText
、EscapeString
、およびEscapeUnicode
は非推奨。
その結果、escape
フィルターの「遅延」動作(フィルターチェーンのどこに表示されていても、常に最後のフィルターとして適用される)は非推奨になります。 フィルタが変更され、Django2.0で conditional_escape()がすぐに適用されます。
その他
makemigrations --exit
オプションは非推奨になり、makemigrations --check
オプションが優先されます。django.utils.functional.allow_lazy()
は非推奨になり、より自然なデコレータ構文で使用できる新しい keep_lazy()関数が採用されました。shell --plain
オプションは廃止され、-i python
または--interface python
が優先されます。django.core.urlresolvers
モジュールからのインポートは非推奨になり、新しい場所 django.urls が優先されます。- テンプレート
Context.has_key()
メソッドは非推奨になり、in
が優先されます。 Model._meta
のプライベート属性virtual_fields
は非推奨になり、private_fields
が優先されます。Field.contribute_to_class()
のプライベートキーワード引数virtual_only
およびModel._meta.add_field()
のvirtual
は非推奨になり、private_only
およびprivate
が優先されます。それぞれ。javascript_catalog()
およびjson_catalog()
ビューは非推奨になり、クラスベースのビュー JavaScriptCatalog および JSONCatalog が優先されます。- マルチテーブル継承では、
OneToOneField
からparent_link
への暗黙的な昇格は非推奨です。 そのようなフィールドにparent_link=True
を追加します。 - プライベートAPI
Widget._format_value()
が公開され、 format_value()に名前が変更されました。 古い名前は非推奨期間を経て機能します。 - プライベート
FileField
メソッドget_directory_name()
およびget_filename()
は、 Storage.generate_filename()でこの作業を実行するために非推奨になりました。 settings.MIDDLEWARE_CLASSES
を使用する古いスタイルのミドルウェアは非推奨です。 古いカスタムミドルウェアを適応させ、新しい:setting: `MIDDLEWARE` 設定を使用します。
1.10で削除された機能
これらの機能は非推奨サイクルの終わりに達し、Django1.10で削除されました。 これらの機能の使用を削除する方法など、詳細については、1.8 で非推奨となった機能を参照してください。
quote_name_unless_alias
メソッドを呼び出すためのエイリアスとしてSQLCompiler
を直接呼び出すためのサポートが削除されました。cycle
およびfirstof
テンプレートタグは、future
テンプレートタグライブラリから削除されます。django.conf.urls.patterns()
が削除されました。django.conf.urls.i18n.i18n_patterns()
に対するprefix
引数のサポートが削除されました。SimpleTestCase.urls
が削除されました。for
テンプレートタグでアンパックされた値の誤ったカウントを使用すると、サイレントに失敗するのではなく、例外が発生します。- ドット付きPythonパスを使用してURLを reverse()する機能が削除されました。
LOGIN_URL
およびLOGIN_REDIRECT_URL
設定に点線のPythonパスを使用する機能が削除されました。optparse
のサポートは、カスタム管理コマンドでは廃止されました。- クラス
django.core.management.NoArgsCommand
が削除されました。 django.core.context_processors
モジュールが削除されました。django.db.models.sql.aggregates
モジュールが削除されました。django.contrib.gis.db.models.sql.aggregates
モジュールが削除されました。django.db.sql.query.Query
の次のメソッドとプロパティが削除されました。- プロパティ:
aggregates
およびaggregate_select
- 方法:
add_aggregate
、set_aggregate_mask
、およびappend_aggregate_mask
。
- プロパティ:
django.template.resolve_variable
が削除されました。- 次のプライベートAPIが django.db.models.options.Options (
Model._meta
)から削除されました。get_field_by_name()
get_all_field_names()
get_fields_with_model()
get_concrete_fields_with_model()
get_m2m_with_model()
get_all_related_objects()
get_all_related_objects_with_model()
get_all_related_many_to_many_objects()
get_all_related_m2m_objects_with_model()
django.forms.RegexField
のerror_message
引数が削除されました。unordered_list
フィルターは、古いスタイルのリストをサポートしなくなりました。url()
への文字列view
引数のサポートが削除されました。django.forms.Form._has_changed()
の名前をhas_changed()
に変更する下位互換性のあるシムが削除されました。removetags
テンプレートフィルターが削除されました。django.utils.html
のremove_tags()
およびstrip_entities()
機能が削除されました。django.contrib.auth.views.password_reset()
のis_admin_site
引数が削除されました。django.db.models.field.subclassing.SubfieldBase
が削除されました。django.utils.checksums
が削除されました。django.contrib.admin.helpers.InlineAdminForm
のoriginal_content_type_id
属性が削除されました。FormMixin.get_form()
をform_class
引数のデフォルト値なしで定義できるようにする下位互換性シムが削除されました。- 次の設定は削除され、:setting: `TEMPLATES` 設定にアップグレードする必要があります。
ALLOWED_INCLUDE_ROOTS
TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_DEBUG
TEMPLATE_DIRS
TEMPLATE_LOADERS
TEMPLATE_STRING_IF_INVALID
- 下位互換性エイリアス
django.template.loader.BaseLoader
が削除されました。 - get_template()および select_template()によって返されるDjangoテンプレートオブジェクトは、 render()メソッドで Context を受け入れなくなりました。
- テンプレート応答API は、コンテキストとテンプレートの代わりに、
dict
とバックエンド依存のテンプレートオブジェクトの使用を強制します。 - 次の関数およびクラスの
current_app
パラメーターが削除されました。django.shortcuts.render()
django.template.Context()
django.template.RequestContext()
django.template.response.TemplateResponse()
- 次の関数の
dictionary
およびcontext_instance
パラメーターが削除されました。django.shortcuts.render()
django.shortcuts.render_to_response()
django.template.loader.render_to_string()
- 次の関数の
dirs
パラメーターが削除されました。django.template.loader.get_template()
django.template.loader.select_template()
django.shortcuts.render()
django.shortcuts.render_to_response()
'django.contrib.auth.middleware.SessionAuthenticationMiddleware'
がMIDDLEWARE_CLASSES
にあるかどうかに関係なく、セッション検証が有効になります。SessionAuthenticationMiddleware
には目的がなくなり、MIDDLEWARE_CLASSES
から削除できます。 このメモを読んでいないユーザーへの礼儀として、Django2.0までスタブとして保持されています。- プライベート属性
django.db.models.Field.related
が削除されました。 migrate
管理コマンドの--list
オプションが削除されました。ssi
テンプレートタグが削除されました。if
テンプレートタグの=
比較演算子のサポートが削除されました。max_length
引数なしでStorage.get_available_name()
およびStorage.save()
を定義できるようにする下位互換性シムは削除されました。ModelFormMixin.success_url
のレガシー%(<foo>)s
構文のサポートは削除されました。GeoQuerySet
集約メソッドcollect()
、extent()
、extent3d()
、make_line()
、およびunionagg()
が削除されました。- コンテンツタイプインスタンスの作成時に
ContentType.name
を指定する機能が削除されました。 allow_migrate
の古い署名のサポートは削除されました。- コンマ区切りの引数を使用する
{% cycle %}
の構文のサポートが削除されました。 - 無効な区切り文字が指定されたときに Signer が発行する警告は、
ValueError
になりました。