
2025/12/05 6:09
Django 6
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## Summary Django 6.0 は 2025年12月3日にリリースされ、Django 5.2 以前からのアップグレードを必要とする新機能といくつかの後方互換性に影響する変更が追加されました。 主な追加点は以下の通りです: - **組み込み Content Security Policy (CSP)**:`ContentSecurityPolicyMiddleware`、`csp()` コンテキストプロセッサ、および `SECURE_CSP` / `SECURE_CSP_REPORT_ONLY` 設定。 - **テンプレートパーシャル**(`{% partialdef %}` / `{% partial %}`)と参照構文 `template_name#partial_name`。 - **組み込み Tasks フレームワーク**:`django.tasks.task` デコレータ、`TASKS` 設定、および開発/テスト用バックエンド 2 種類。外部ワーカーは依然として必要です。 - **モダンなメール処理**:Python の `email.message.EmailMessage` を使用し、旧式の MIME クラスを置き換えます。 - **管理インターフェース更新**:Font Awesome 6.7.2 アイコン、カスタマイズ可能な `AdminSite.password_change_form`、および `messages.DEBUG` / `INFO` 用に別々のアイコン。 - パスワードハッシャーの反復回数が 1,000,000 から 1,200,000 に増加しました。 その他重要な変更点: - **Python 対応**は現在 3.12‑3.14 のみ。Django 5.2.x が Python 3.10/3.11 をサポートした最後のリリースです。 - **MariaDB 10.5 サポート**が削除されました。 - デフォルトの `DEFAULT_AUTO_FIELD` は `BigAutoField` になりました。 - カスタム ORM 表現はパラメータをタプルで返す必要があります。 - 複数の非推奨項目(例:位置付きメール API 引数、レガシーメール MIMEBase サポート、BaseConstraint、Jinja2DivFormRenderer、移行設定 `URLIZE_ASSUME_HTTPS` など)がリリースノートに記載されています。 サードパーティアプリの作者は、本リリース後に Django 5.2 より古いバージョンへのサポートを削除し、非推奨警告に対処することが推奨されます。リリースには contrib アプリ全体でのさまざまな小規模機能追加も含まれています(GIS ジオメトリチェック、PostgreSQL フルテキスト検索 Lexeme 表現、staticfiles マニフェスト順序付けなど)。 以前のバージョンからアップグレードする開発者は、詳細な後方互換性に影響する変更を確認し、マイグレーション計画を立てるべきです。
本文
2025年12月3日 – Django 6.0 リリースノート
Django 6.0へようこそ! 本ノートでは、Django 5.2 以前からのアップグレードに影響を与える新機能と後方互換性のない変更点について説明します。いくつかの機能は非推奨化プロセスが始まっており、既存プロジェクトを更新する際は「How to upgrade」ガイドをご覧ください。
Python との互換性
- Django 6.0 は Python 3.12, 3.13, 3.14 をサポートします(各シリーズの最新バージョンが推奨)。
- Django 5.2.x が Python 3.10 と 3.11 を最後にサポートするリリースです。
古い Django バージョンへのサードパーティライブラリサポート
Django 6.0 リリース後、サードパーティアプリの作者は 5.2 未満の全バージョン へのサポートを終了すべきです。
python -Wd を使ってパッケージのテストを実行し、非推奨警告が表示されるようにしてください。警告を修正した後、アプリは Django 6.0 と互換性があります。
Django 6.0 の新機能
コンテンツセキュリティポリシー(CSP)サポート
組み込み CSP ツールにより XSS やその他のコンテンツ注入攻撃から保護しやすくなります。
がヘッダーを追加します。ContentSecurityPolicyMiddleware
コンテキストプロセッサで nonce をサポート。csp()- ポリシーは
とSECURE_CSP
(Python 辞書)で設定し、Django から提供される定数を使用します。SECURE_CSP_REPORT_ONLY
from django.utils.csp import CSP SECURE_CSP = { "default-src": [CSP.SELF], "script-src": [CSP.SELF, CSP.NONCE], "img-src": [CSP.SELF, "https:"], }
結果として生成されるヘッダー:
Content‑Security‑Policy: default-src 'self'; script-src 'self' 'nonce-SECRET'; img-src 'self' https:
詳細は CSP 使い方ガイドとセキュリティ概要を参照してください。
テンプレートパーシャル
Django テンプレート言語が 名前付きパーシャル(
{% partialdef %} / {% partial %}) をサポートします。また、
get_template(), render(), {% include %} などでtemplate_name#partial_name の形式で参照できるようになり、別ファイルに分割せずにモジュール化されたテンプレートを実現できます。サードパーティの django-template-partials パッケージ向け移行ガイドがあります。
バックグラウンドタスク
Django は組み込みタスクフレームワーク(
django.tasks) を提供します。
デコレーターでタスクを定義し、@task
でキューに投入。.enqueue()- バックエンドは
設定で指定。開発/テスト用バックエンドが付属していますが、本番環境では外部ワーカーが必要です。詳細は Tasks フレームワークとリファレンスを参照してください。TASKS
from django.core.mail import send_mail from django.tasks import task @task def email_users(emails, subject, message): return send_mail(subject, message, None, emails) email_users.enqueue( emails=["user@example.com"], subject="You have a message", message="Hello there!", )
モダンメール API
メール処理は Python の modern
クラス(Python 3.6+) を採用します。email.message.EmailMessage
はEmailMessage.message()
オブジェクトを返す。EmailMessage
はモダン email API の MIMEPart オブジェクトを受け取る。EmailMessage.attach()
マイナー機能
django.contrib.admin
- Font Awesome Free v6.7.2 アイコンが追加。
属性でパスワード変更フォームをカスタマイズ可能。AdminSite.password_change_form
用に別々のアイコンと CSS が用意。messages.DEBUG / messages.INFO
django.contrib.auth
- PBKDF2 のイテレーション数が 1 200 000 に増加。
django.contrib.gis
- 新機能:
,GEOSGeometry.hasm
DB 関数,Rotate
.BaseGeometryWidget.base_layer - 追加:
,coveredby
ラックアップ;isvalid
集約。Collect - MariaDB 12.0.1+ が GeoHash と IsValid 関数をサポート。
- 新ラッパー:
; DB 関数geom_type
.GeometryType() - ウィジェットはインライン JavaScript を出力しない。
django.contrib.postgres
- Lexeme 式で細粒度の全文検索が可能。
- モデルフィールド、インデックス、制約に対するシステムチェック追加。
- 拡張操作はオプション
を受け取るようになった。hints
django.contrib.staticfiles
がパス順序を一貫して保証。ManifestStaticFilesStorage
は verbosity 1 で概要のみ報告し、詳細は verbosity 2+ で表示。collectstatic
がEmailMessage.message()
引数(デフォルト:policy
) を受け取る。email.policy.default
がモダン MIMEPart オブジェクトを受け付けるようになった。EmailMessage.attach()
国際化
- ハイチ語 (Haitian Creole) の翻訳が追加。
管理コマンド
/startproject
がターゲットディレクトリを存在しない場合に作成。startapp- Shell は自動的に
をインポート。django.conf.settings
マイグレーション
- スクアッシュ済みマイグレーションは再スクワッシュ可能。
のシリアライズサポート。zoneinfo.ZoneInfo- Deconstructible オブジェクトは、識別子として無効なキーワード引数を受け取れるようになった。
モデル
- 制約が登録済みの
メソッドを実装。check()
に新Aggregate
引数とorder_by
属性。allow_order_by
が結合文字列を返すようにし、PostgreSQL, SQLite, MySQL, Oracle, PostgreSQL 16+ でサポート。StringAgg
は強制更新が行われても影響行が無い場合にsave()
を送出。Model.NotUpdated
がQuerySet.raw()
モデルを扱えるようになった。CompositePrimaryKey
付きサブクエリはCompositePrimaryKey
の他、__in
等も対象にできる。__exact- SQLite 上で
が負の配列インデックスをサポート。JSONField
集約が任意の非 null 値を返すようになり、SQLite, MySQL, Oracle, PostgreSQL 16+ で利用可能。AnyValue- 生成フィールドと式割当フィールドは
後に DB からリフレッシュされる(save()
がサポートされている場合)。RETURNING - 複数の
を持つfrom_fields
をインデックス/制約/unique_together に使用するとシステムチェックエラーになる。ForeignObject
ページネーション
- 非同期実装:
,AsyncPaginator
.AsyncPage
リクエストとレスポンス
- ASGI 下で HTTP/2 リクエストに対して複数 Cookie ヘッダーをサポート。
テンプレート
- 新変数
。forloop.length
タグがquerystring
で接頭辞し、複数位置引数のマッピングも受け付けるように変更。?
テスト
が forkserver スタートメソッドで並列テスト実行をサポート。DiscoverRunner
Django 6.0 の後方互換性のない変更
データベースバックエンド API
と PostgreSQL バックエンドは、カラム削除時に CASCADE を使用しなくなった。BaseDatabaseSchemaEditor- メソッド名変更:
→return_insert_columns()
,returning_columns()
→fetch_returned_insert_rows()
.fetch_returned_rows()
は削除された。fetch_returned_insert_columns()- バックエンドは
を設定して、UPDATE … RETURNING がサポートされることを示せる。DatabaseFeatures.can_return_rows_from_update=True
サポート廃止
- MariaDB 10.5 – Django 6.0 は MariaDB 10.6+ をサポート。
- Python < 3.12 – 最小サポートバージョンは 3.12。オプション依存パッケージも対応バージョンを合わせる必要あり(互換ライブラリ一覧参照)。
- 非公開
,mixed_subtype
プロパティが削除。alternative_subtype - 非公開
プロパティは旧encoding
をサポートしなくなる。email.charset.Charset - 内部アンダースコアメソッドをオーバーライドするカスタムサブクラスは見直すべき。
DEFAULT_AUTO_FIELD
- デフォルトが
に変更され、プロジェクト/アプリテンプレートに旧デフォルト設定は含まれない。django.db.models.BigAutoField
依然として
を使いたい場合はAutoField
を明示的に追加する。DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
カスタム ORM 式
は 常にas_sql()
のタプル を返す必要がある。(sql, params)
は必ずタプルであるべき。params
その他
- JSON シリアライザは末尾に改行を書き込むようになった。
- 最小サポート
が 3.9.1 に引き上げられた。asgiref
Django 6.0 で非推奨化された機能
django.core.mail
の位置引数
django.core.mail- 任意パラメータはすべてキーワードで指定するようにし、位置引数の使用は非推奨警告を発生させる。将来的には
が送出される。TypeError
その他
– 代わりにBaseDatabaseCreation.create_test_db(serialize)
を使用。serialize_db_to_string()- PostgreSQL の
クラスは非推奨、一般的なStringAgg
を使う。StringAgg - PostgreSQL の
は非推奨、OrderableAggMixin
を利用。Aggregate.order_by
/urlize
のデフォルトプロトコルは Django 7.0 で HTTPS に変更予定。早期にオプトインしたい場合はurlizetrunc
を設定。URLIZE_ASSUME_HTTPS=True
/ADMINS
はMANAGERS
タプルではなく メール文字列のリスト として定義するべき。(name, address)
引数 ≥ per_page が非推奨。orphans- 列エイリアス/アノテーションで
記号を使用することは非推奨。% - 旧 MIMEBase アタッチメントサポートは非推奨、モダン MIMEPart を利用。
,BadHeaderError
,SafeMIMEText
, 未公開関数 (SafeMIMEMultipart
,forbid_multi_line_headers()
) は非推奨。message.sanitize_address()
Django 6.0 で削除された機能
(「非推奨化」セクションの詳細参照。)
主な削除項目は以下の通りです:
の位置引数BaseConstraint- 移行用フォームレンダラ (
,DjangoDivFormRenderer
)Jinja2DivFormRenderer
,field_cast_sql()
メソッドと関連フォールバックget_joining_columns()
サポートの廃止cx_Oracle
とdjango.contrib.gis
のいくつかの非推奨ヘルパーdjango.urls- 内部ユーティリティ (
等)django.utils.itercompat.is_iterable - 非推奨設定 (
) などFORMS_URLFIELD_ASSUME_HTTPS
Django 6.0 リリースノートは以上です。