
2025/12/10 5:33
Django: what’s new in 6.0
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Django 6.0 – 主なリリースハイライト
リリース日 2025‑12‑03
| エリア | 変更点 | 意義 |
|---|---|---|
| テンプレート | 新しい / タグで、テンプレートを再利用可能なフラグメントに分割し、インラインまたは別途レンダリングでき、htmx とも相性が良い。 | テンプレートの DRY 化、ボイラープレート削減、コンポーネント再利用の容易化。 |
| バックグラウンドタスク | 組み込み「Tasks」フレームワーク: デコレーター + API。組み込みバックエンド(、)があり、実稼働ではサードパーティパッケージ(例: の )が必要。 | 単純なジョブに対して外部タスクライブラリの必要性を排除しつつ、実稼働時の柔軟性は維持。 |
| セキュリティ | を追加。 と で設定可能。ノンスは自動生成され、テンプレート内では ()で使用できる。 | 自動ノンス処理付きの CSP サポートを組み込み、XSS リスクをデフォルトで低減。 |
| メール | Django のメール API が Python の を利用するように変更。 は内部でこの API に変換し、インライン添付は オブジェクトで追加可能。 | 標準ライブラリ互換のモダンなメール処理と簡易的な添付サポート。 |
| Mail API の非推奨 | API ではキーワード専用引数が必須となり、位置オプションパラメータは警告を出し将来的にエラーになる。 | より明確な API 使用を促進し、コードの未来保証を実現。 |
| シェル | 自動インポートが拡張され、 、、、、、 が追加。 | もっと高速で便利な対話型開発環境。 |
| ORM | • 動的フィールド(、)は 後に SQL RETURNING を通じてリフレッシュされる;未対応バックエンドでは次回アクセス時まで遅延。• 集約がすべてのサポートデータベースで動作;文字列リテラル区切りは で包む必要。• デフォルト主キー型が に変更され、新規プロジェクトでは を設定しなくなる。 | モデル定義の簡素化、パフォーマンス向上、大規模アプリでの PK 終了防止。 |
| テンプレート変数 & タグ | が追加され、ループ長にアクセス可能;更新された タグは で接頭辞し、複数位置引数を受け取り、重複時には優先順位でマージ。 | より表現力豊かなテンプレートロジックとクリーンなクエリ文字列処理。 |
| コミュニティ | Django 6.0 に 174 人の貢献者が参加。リリースノートではアップグレード準備を強調し、開発者に新機能を試すよう呼びかける;今後のリリースでタスクバックエンドや CSP 機能が拡張される可能性。 | 健全なコミュニティサポートとさらなる改善へのロードマップを示唆。 |
まとめ:
Django 6.0 は、再利用可能なテンプレートフラグメント、オプションの組み込みタスクシステム、ノンス付き CSP ミドルウェア、モダン化されたメール API など、実務で即使える改善を提供します。さらに ORM の強化、シェルの利便性向上、旧パターンの非推奨により、ボイラープレート削減・セキュリティ向上・大規模プロジェクトの将来準備が実現されます。
本文
Django 6.0 – 主要変更点
django‑upgrade を使ったアップグレード
Django 5.2以前からプロジェクトを移行する場合は django-upgrade を試してみてください。
自動的に古い Django コードを新機能に合わせて更新し、非推奨警告も修正します。Django 6.0 には 5 つのファイザーが含まれています。
1. テンプレートパーシャル
Django はテンプレート内で再利用できる小さな名前付きフラグメント、template partials をサポートします。別個にレンダリングすることも可能です。
{% partialdef filter_controls %} <form> {{ filter_form }} </form> {% endpartialdef %} {% partial filter_controls %}
定義自体を表示したい場合は
を使います。inline
2. タスクフレームワーク
組み込みのバックグラウンドタスクシステムが追加されました。
from django.tasks import task @task def resize_video(video_id): ... resize_video.enqueue(video.id)
開発時に利用できるバックエンドは以下です:
- ImmediateBackend – 同期で実行。
- DummyBackend – 何もしない。テスト向け。
本番環境では、例えば django-tasks の
DatabaseBackend などサードパーティ製を使用してください。
3. コンテンツセキュリティポリシー(CSP)対応
ミドルウェアを追加します:
MIDDLEWARE = [ # … "django.middleware.csp.ContentSecurityPolicyMiddleware", ]
設定は次のように行います。
SECURE_CSP_REPORT_ONLY = { "script-src": [CSP.NONCE, CSP.STRICT_DYNAMIC], "object-src": [CSP.NONE], "base-uri": [CSP.NONE], }
Nonce の生成は組み込みで、タグに
を付与します。nonce="{{ csp_nonce }}"
4. メール API の更新
Django は Python のモダンなメール API (
email.message.EmailMessage) を採用しました。既存の使い方はそのままです。
from django.core.mail import EmailMessage email = EmailMessage( subject="🐼 Need more bamboo", body="…", from_email="zookeeper@example.com", to=["supplies@example.com"], ) email.attach_file("/media/bamboo_cupboard.jpg") email.send()
インライン添付
from email.message import MIMEPart import email.utils cid = email.utils.make_msgid() inline_image = MIMEPart() inline_image.set_content( panda_jpeg, maintype="image", subtype="jpeg", disposition="inline", cid=cid, ) message.attach(inline_image)
5. django.core.mail
API の位置引数
django.core.mailあまり使われないパラメータはキーワード引数で渡す必要があります。
send_mail( subject="🐼 Panda of the week", body="…", from_email="updates@example.com", ["adam@example.com"], fail_silently=True, )
6. 自動シェルインポートの拡張
./manage.py shell は次のユーティリティを自動でインポートします:
settings
,connectionreset_queries
,modelsfunctionstimezone
必要に応じてドキュメントからリストをカスタマイズできます。
7. save()
時の動的フィールド更新
save()以下で定義されたフィールドは、
save() 後に SQL の RETURNING 句を使って自動更新されます(SQLite, PostgreSQL, Oracle)。
db_defaultGeneratedField- 式による代入
MySQL/MariaDB では遅延処理としてマークされ、後で自動更新されます。
8. ユニバーサルな StringAgg
集約
StringAggすべてのバックエンドで利用可能です:
from django.db.models import StringAgg, Value videos = Video.objects.annotate( chapter_ids=StringAgg("chapter", delimiter=Value(",")) )
9. デフォルト PK 型を BigAutoField
に変更
BigAutoFieldDEFAULT_AUTO_FIELD はデフォルトで django.db.models.BigAutoField が設定されます。新規プロジェクトでは追加の設定が不要です。
10. テンプレート変数 forloop.length
forloop.lengthループ内で
{{ forloop.length }} を使用できます:
{% for goose in geese %} <li>{{ forloop.counter }}/{{ forloop.length }}: {{ goose.name }}</li> {% endfor %}
11. クエリストリングテンプレートタグの拡張
- 一貫した
プレフィックス – 空の場合でもクエリパラメータをクリアします。? - 複数位置引数 – 複数マッピングを統合できます。
<a href="{% querystring request.GET super_search_params %}">Super search</a>
まとめ
Django 6.0 は、テンプレートパーシャルや組み込みタスクフレームワーク、CSP サポート、モダンメール処理などの強力な新機能と改善を提供しつつ、後方互換性も維持しています。
今日からアップグレードして、新しい機能をぜひ体験してください。