Rilis Django 6
(docs.djangoproject.com)- Versi 6.0 dari framework web Django telah dirilis, mendukung Python 3.12 ke atas, dengan peningkatan besar pada fitur keamanan, template, dan asinkron
- Content Security Policy (CSP) kini terintegrasi secara bawaan sehingga kebijakan untuk melindungi dari serangan injeksi konten seperti XSS dapat dikonfigurasi
- Fitur Template Partials memungkinkan definisi bagian template yang dapat digunakan ulang, sehingga modularisasi kode menjadi lebih baik
- Framework Background Tasks ditambahkan untuk mendukung eksekusi pekerjaan asinkron di luar siklus request-response
- Dengan adopsi API email terbaru Python, penghentian dukungan MariaDB 10.5, dan perubahan nilai default
DEFAULT_AUTO_FIELD, dilakukan penyesuaian kompatibilitas dan modernisasi
Kompatibilitas Python
- Django 6.0 mendukung Python 3.12, 3.13, 3.14, dan hanya rilis terbaru dari tiap seri yang didukung secara resmi
- Django 5.2.x adalah versi terakhir yang mendukung Python 3.10 dan 3.11
- Setelah Django 6.0, aplikasi pihak ketiga disarankan untuk menghentikan dukungan bagi versi sebelum Django 5.2
Fitur baru utama
Dukungan Content Security Policy (CSP)
- Standar CSP kini tertanam di Django untuk memperkuat pertahanan terhadap serangan injeksi konten seperti XSS
- Kebijakan dapat didefinisikan melalui
ContentSecurityPolicyMiddleware, context processorcsp(), dan pengaturanSECURE_CSP - Mendukung konfigurasi kebijakan yang jelas dan aman berbasis dictionary Python
- Kebijakan dapat didefinisikan melalui
- Mode pemantauan dapat diaktifkan dengan
SECURE_CSP_REPORT_ONLY - Disediakan decorator untuk menimpa atau menonaktifkan kebijakan per view
Template Partials
- Ditambahkan tag
partialdefdanpartialuntuk mendefinisikan dan menggunakan ulang bagian template (fragment) - Dengan sintaks
template_name#partial_name, bagian ini dapat dirujuk langsung dariget_template(),render(),{% include %}, dan lainnya - Tersedia panduan migrasi bagi pengguna paket pihak ketiga
django-template-partials
Framework Background Tasks
- Django kini menambahkan framework bawaan untuk menjalankan pekerjaan asinkron
- Dapat digunakan untuk mengirim email, memproses data, dan tugas lain di luar siklus request-response HTTP
- Tugas didefinisikan dengan decorator
@taskdan dimasukkan ke antrean denganenqueue()
- Backend ditentukan melalui pengaturan
TASKS, dan dua backend bawaan disertakan untuk pengembangan dan pengujian - Django hanya menangani pembuatan dan pengantrean tugas, sedangkan eksekusi harus dilakukan oleh proses worker eksternal
Adopsi API email terbaru Python
- Logika pemrosesan email Django beralih ke API email modern Python sejak 3.6 (
email.message.EmailMessage) - Kelas lama
SafeMIMETextdanSafeMIMEMultiparttidak lagi digunakan - Tipe hasil pengembalian
EmailMessage.message()berubah menjadi instanceEmailMessagemilik Python
Peningkatan detail
Admin
- Mengadopsi set ikon Font Awesome Free 6.7.2
- Form ubah kata sandi admin kini dapat dikustomisasi melalui properti
AdminSite.password_change_form - Ikon dan gaya CSS terpisah diterapkan untuk
messages.DEBUGdanmessages.INFO
Auth
- Jumlah iterasi hash PBKDF2 meningkat dari 1,000,000 → 1,200,000
GIS
- Properti
GEOSGeometry.hasmmemungkinkan pengecekan dimensi M - Fungsi
Rotatemendukung rotasi dengan sudut tertentu - Properti
BaseGeometryWidget.base_layermemungkinkan kustomisasi penyedia tile peta - Di MariaDB 12.0.1 ke atas, didukung fitur seperti
coveredby,isvalid,GeoHash,IsValid, dan lainnya - JavaScript inline dihapus saat rendering widget, sehingga kustomisasi kini memerlukan perubahan template
PostgreSQL
- Penambahan ekspresi Lexeme meningkatkan kontrol terhadap kueri pencarian teks penuh
- Parameter
hintsditambahkan ke operasi terkait ekstensi sepertiCreateExtension - Pemeriksaan sistem ditambahkan untuk field, indeks, dan constraint terkait
django.contrib.postgres
Staticfiles
ManifestStaticFilesStoragekini menjamin konsistensi pengurutan path, sehingga mengurangi diff yang tidak perlu- Perintah
collectstaticsecara default hanya menampilkan ringkasan, sedangkan detail ditampilkan pada--verbosity 2atau lebih tinggi
Lainnya
- Dukungan untuk bahasa Haitian Creole ditambahkan
- Perintah
startprojectdanstartappkini otomatis membuat direktori yang belum ada - Di perintah
shell, utilitas dasar sepertidjango.conf.settingsdiimpor otomatis - Migrasi kini mendukung serialisasi
zoneinfo.ZoneInfo - Ditambahkan fungsi agregasi baru seperti
StringAggdanAnyValue AsyncPaginatordanAsyncPagemenghadirkan pagination asinkron- Lingkungan ASGI kini mendukung header Cookie HTTP/2 multipel
- Variabel
forloop.lengthditambahkan ke template, dan tagquerystringditingkatkan DiscoverRunnerkini mendukung pengujian paralel dengan metodeforkserver
Perubahan yang tidak kompatibel
API backend database
BaseDatabaseSchemaEditordan backend PostgreSQL tidak lagi menggunakanCASCADEsaat menghapus kolom- Nama metode berubah, seperti
return_insert_columns()→returning_columns() - Jika mendukung
UPDATE … RETURNING, dapat mengaturDatabaseFeatures.can_return_rows_from_update=True
Dukungan yang dihentikan
- Dukungan untuk MariaDB 10.5 dihentikan (memerlukan 10.6 ke atas)
- Dukungan untuk Python di bawah 3.12 dihentikan
- Versi minimum library utama mencakup
aiosmtpd 1.4.5,bcrypt 4.1.1,Pillow 10.1.0,psycopg 3.1.12, dan lainnya
- Versi minimum library utama mencakup
- Properti
mixed_subtype,alternative_subtype, danencodingdihapus - Karena perubahan implementasi internal, subclass
EmailMessagekustom perlu ditinjau
Perubahan nilai default DEFAULT_AUTO_FIELD
- Nilai default berubah dari
AutoField→BigAutoField - Proyek yang belum menangani peringatan Django 3.2 (
models.W042) perlu menambahkan pengaturan terkait
Ekspresi ORM
- Parameter return dari metode
as_sql()harus berbentuk tuple
Lainnya
- Serialisasi JSON kini selalu menambahkan baris baru
- Versi minimum
asgirefdinaikkan menjadi 3.9.1
Fitur yang akan deprecated
API django.core.mail
- Di
get_connection(),send_mail(), dan lainnya, argumen opsional harus diberikan hanya sebagai keyword argument - Saat membuat
EmailMessagedanEmailMultiAlternatives, selain empat argumen pertama, sisanya hanya boleh berupa keyword argument
Lainnya
BaseDatabaseCreation.create_test_db(serialize)akan deprecated, gunakanserialize_db_to_string()StringAggdanOrderableAggMixinkhusus PostgreSQL akan deprecated- Protokol default
urlizedanurlizetruncakan berubah ke HTTPS di Django 7.0 - Pengaturan
ADMINSdanMANAGERSharus ditetapkan sebagai daftar string email, bukan tuple (nama, alamat) - Kelas terkait email seperti
SafeMIMEText,SafeMIMEMultipart, danBadHeaderErrorakan deprecated
Fitur yang dihapus
- Dukungan argumen posisi pada
BaseConstraintdihapus DjangoDivFormRendererdanJinja2DivFormRendererdihapus- Dukungan driver database
cx_Oracledihapus - Skema default
forms.URLFieldberubah dari"http"→"https" - Dukungan argumen posisi pada
Model.save()danModel.asave()dihapus ModelAdmin.log_deletion()danLogEntryManager.log_action()dihapus- Modul
django.utils.itercompatdihapus - Metode
GeoIP2.coords()danGeoIP2.open()dihapus ForeignObject.get_joining_columns()dan metode terkait dihapus
Django 6.0 meningkatkan stabilitas dan skalabilitas framework melalui penguatan keamanan, pemrosesan asinkron, dan adopsi API email modern, sekaligus memperjelas transisi ke lingkungan Python 3.12 ke atas.
1 komentar
Komentar Hacker News
Di organisasi tempat saya pernah bekerja, ada codebase ‘modern’ berbasis NodeJS+React, dan aplikasi legacy Django berbasis Python 2.7 yang usianya hampir 15 tahun
Awalnya saya khawatir kode lamanya akan menyiksa, tetapi ternyata justru sebaliknya
Aplikasi Django itu menyenangkan untuk ditangani, dan proses merapikannya benar-benar seru. Saat nanti diganti dengan rewrite Go/React yang baru, saya rasa saya akan merasa sayang
Selamat kepada tim Django
Saya sudah lama memelihara aplikasi starter Django + Celery + Postgres + Redis + esbuild + Tailwind berbasis Docker Compose, dan baru-baru ini saya memperbaruinya agar sesuai dengan Django 6.0
Bisa dilihat di repositori GitHub
Saya masih belum memasukkan konfigurasi CSP sebagai default, tetapi berencana menambahkannya setelah ditinjau lebih lanjut
Filosofi “batteries included” Django sangat cocok untuk generasi kode AI
Panel admin, login, reset kata sandi, dan fitur dasar lain sudah tersedia dengan baik, jadi AI bisa membuat situs yang lengkap bahkan dengan codebase kecil
Karena kodenya kecil dan jelas, AI juga lebih mudah melakukan perbaikan berulang
Alih-alih komponen raksasa, ada model dan template yang jelas, sehingga kode hasil AI juga lebih mudah direview
Selain itu, Django admin hadir sebagai ground truth yang terpisah, jadi walaupun frontend rusak, data tetap bisa dikelola
Hanya saja, saya menyayangkan ekosistem Python tidak mengadopsi model gevent. Kalau iya, transisi ke async pasti akan jauh lebih mulus
Ini jauh lebih terintegrasi dibanding framework yang terhubung longgar seperti Flask atau FastAPI
Perbedaan seperti ini pada akhirnya mengurangi banyak gangguan kecil (papercuts)
Saya me-rewrite aplikasi .NET lama, dan Rails mengonversinya hampir sempurna, sementara Django kesulitan
Fitur template partials di rilis ini terlihat cukup bagus
Tetapi kondisi type annotations masih tetap merepotkan
django-stubs memerlukan plugin mypy, django-types adalah fork untuk pyright tetapi sinkronisasinya kurang baik
pylance juga memakai fork-nya sendiri
Saya berharap versi berikutnya setidaknya secara resmi menyertakan tipe dasar seperti HttpRequest, HttpResponse, View, dan Model
Berkat Django, pengembangan web benar-benar terasa menyenangkan
Walaupun pindah ke framework lain, pada akhirnya saya selalu kembali ke Django. Itu adalah pilihan tanpa penyesalan
Mau mencoba framework lain pun, pada akhirnya saya kembali karena kenyamanan Rails
Hanya saja, saya menyayangkan Rails tidak punya Admin UI bawaan
Kalau ingin full stack yang benar-benar lengkap, lebih baik lihat Laravel atau Rails
Saya sudah berkecimpung di web sejak era PHP, dan Django selalu terasa biasa saja bagi saya
Django adalah proyek besar freelance pertama saya, dan sampai sekarang masih terasa akrab
Saya sudah mencoba berbagai eksperimen, tetapi selalu berjalan dengan baik. Terima kasih, Django
Saya sudah hampir eksklusif memakai Django selama sekitar 15 tahun
Saya mencoba banyak framework lain, tetapi tidak ada yang sepas di tangan seperti Django
Di rilis kali ini mereka menambahkan task framework, tetapi sayang backend dan worker-nya tidak ikut disertakan
Saya justru berharap versi berikutnya menghadirkan bentuk yang lengkap
Berkat konfigurasi bawaan yang lengkap (batteries included), Django cocok untuk proyek apa pun tanpa memandang skala
Pujian untuk tim dan para kontributornya
Saya penasaran bagaimana kita bisa masuk ke era SPA. Apakah awalnya hanya untuk menghilangkan loading spinner, atau memang ada alasan yang lebih dalam
Ketika web, iOS, dan Android dibuat berbagi satu backend, pola SPA pun menyebar secara alami
Saya sendiri masih membuat SPA, tetapi suatu hari ingin mencoba proyek besar dengan Django + htmx
Menjalankan aplikasi seperti app tanpa reload halaman memang menarik, tetapi dalam praktiknya sering juga perlu force refresh
Meski begitu, saya tetap menganggap struktur yang memisahkan data dan presentasi itu elegan
Karena itu, upaya untuk mengubah dokumen menjadi seperti aplikasi lewat JS terus berlanjut
Pada akhirnya frontend dan backend dipisahkan, lalu muncullah kontrak API dan prosedur validasi
Belakangan muncul lagi arus untuk menyatukannya kembali lewat server components, dan sekarang kita berada di titik itu
Sebagai referensi, contoh webform gaya lama bisa dilihat di tautan ini
Karena itu saya jadi lebih menyukai build process berbasis TypeScript
Setiap kali memakai Django, saya hanya merasakan kesenangan. Itu saja.