- Django 6.0 yang menandai ulang tahun ke-20 merupakan rilis besar yang membawa banyak peningkatan pada area inti seperti template, pekerjaan latar belakang, keamanan, email, dan lainnya
- Fitur template partials memudahkan penggunaan ulang kode di dalam template serta memperkuat integrasi dengan alat seperti htmx
- Framework Tasks baru ditambahkan sehingga pekerjaan latar belakang dapat dijalankan di luar siklus request-response HTTP
- Content Security Policy (CSP) kini tersedia secara bawaan sehingga pertahanan terhadap serangan injeksi konten seperti XSS menjadi lebih mudah
- Modernisasi API email, peningkatan ORM, perluasan kunci primer, dan lainnya secara signifikan meningkatkan pengalaman developer serta skalabilitas
Ikhtisar Django 6.0
- Django 6.0 adalah rilis baru dari framework web Python yang melanjutkan evolusinya selama 20 tahun
- Perubahan utama disusun di sekitar empat area inti: template, pekerjaan latar belakang, keamanan, dan pemrosesan email
- Banyak kontributor dari komunitas developer ikut berpartisipasi, dan poin-poin peningkatan utama dirangkum berdasarkan catatan rilis resmi
Alat django-upgrade
- Saat meningkatkan proyek yang sudah ada dari Django 5.2 atau versi lebih lama, alat django-upgrade dapat digunakan untuk melakukan transformasi kode secara otomatis
- Termasuk 5 fixer otomatis terkait Django 6.0 yang dapat menyelesaikan sebagian peringatan secara otomatis
Template partials
- Fitur definisi bagian template (
{% partialdef %}) ditambahkan agar duplikasi kode di dalam template berkurang dan penggunaan ulang menjadi memungkinkan
- Partial yang didefinisikan dalam template yang sama dapat dipanggil berkali-kali
- Dengan opsi
inline, partial dapat dirender sekaligus saat didefinisikan
- Melalui fitur rendering parsial, hanya partial tertentu yang dapat dirender secara terpisah
- Dalam contoh,
view_count diperbarui secara berkala menggunakan htmx
- Dengan menambahkan
#partial_name pada URL, hanya bagian tertentu yang dapat dirender
- Fitur ini diintegrasikan ke Django melalui proyek Google Summer of Code, dan dikembangkan dari paket
django-template-partials yang sudah ada
Framework Tasks
- Django kini menambahkan framework Tasks untuk menjalankan pekerjaan latar belakang
- Kode dapat dijalankan di luar siklus request-response HTTP
- Dapat digunakan untuk pekerjaan asinkron seperti pengiriman email, pemrosesan data, dan pembuatan laporan
- Pekerjaan didefinisikan dengan dekorator
@task, lalu dapat dimasukkan ke antrean dengan Task.enqueue()
- Backend bawaan yang tersedia untuk pengembangan adalah
ImmediateBackend dan DummyBackend,
sedangkan eksekusi berbasis SQL DB dapat dilakukan dengan DatabaseBackend dari paket django-tasks
- Worker tugas dijalankan dengan perintah
db_worker, dan status dapat diperiksa melalui log
- Fitur ini berawal dari ide di Wagtail, lalu diintegrasikan ke Django setelah proposal DEP 0014
Dukungan Content Security Policy (CSP)
- Django 6.0 mendukung standar CSP secara bawaan, memperkuat pertahanan terhadap serangan injeksi konten seperti XSS
- Aktifkan dengan menambahkan
ContentSecurityPolicyMiddleware ke MIDDLEWARE
- Kebijakan dapat dikonfigurasi melalui pengaturan
SECURE_CSP dan SECURE_CSP_REPORT_ONLY
- Keamanan berbasis nonce tersedia secara bawaan sehingga atribut
nonce="{{ csp_nonce }}" dapat ditambahkan pada tag <script> dan <style>
- Nonce acak dibuat untuk setiap request sehingga hanya resource tepercaya yang dapat dijalankan
- CSP telah diusulkan sejak 2004 dan sebelumnya diimplementasikan melalui paket
django-csp, lalu kini resmi dibangun langsung ke dalam framework
Pembaruan API email
- Logika pemrosesan email di Django beralih ke API email modern dari Python 3.6
- Secara internal menggunakan kelas
email.message.EmailMessage
- Antarmuka
send_mail() dan EmailMessage yang ada tetap dipertahankan
- API baru ini memberi keuntungan seperti lebih sedikit bug, keamanan yang lebih baik, dan penanganan lampiran inline yang lebih baik
- Dengan objek
MIMEPart, lampiran inline seperti gambar di dalam body HTML dapat ditambahkan dengan mudah
- Perubahan ini diusulkan pada 2024 dan digabungkan setelah 8 bulan pengembangan
Pembatasan argumen posisi pada API email
- Beberapa parameter pada API
django.core.mail kini hanya boleh menggunakan argumen keyword
- Jika argumen opsional seperti
fail_silently diberikan sebagai argumen posisi, peringatan akan muncul
- Ini dilakukan untuk meningkatkan keterbacaan dan kemudahan pemeliharaan
- Perbaikan otomatis dapat dilakukan dengan fixer
mail_api_kwargs dari django-upgrade
Perluasan auto import di Shell
- Fitur auto import model dari Django 5.2 diperluas sehingga
settings, connection, models, functions, timezone dan lainnya kini diimpor otomatis
- Daftar auto import dapat diperiksa dengan
./manage.py shell -v 2
- Meningkatkan kenyamanan pengembangan dan mengurangi kode berulang
Peningkatan ORM: pembaruan field dinamis saat save()
GeneratedField atau field berbasis ekspresi kini diperbarui otomatis setelah save()
- Pada DB yang mendukung klausa
RETURNING (SQLite, PostgreSQL, Oracle), perubahan langsung tercermin
- Pada MySQL dan MariaDB, pembaruan otomatis dilakukan melalui lazy loading
- Nilai terbaru bisa langsung digunakan tanpa query tambahan sehingga efisiensi meningkat
Fungsi agregasi Universal StringAgg
- Fungsi agregasi
StringAgg kini dapat digunakan di semua backend database
- Mengembalikan string yang menggabungkan nilai input dengan pemisah (delimiter)
- Sebelumnya ini adalah fitur khusus PostgreSQL, tetapi sekarang dapat digunakan langsung dari
django.db.models
- Pemisah dapat ditentukan dengan ekspresi
Value()
BigAutoField sebagai default
- Nilai default
DEFAULT_AUTO_FIELD berubah menjadi BigAutoField
- Menggunakan primary key integer 64-bit untuk mencegah masalah kehabisan Primary Key
- Pada proyek baru, ini diterapkan otomatis tanpa konfigurasi tambahan
- Menyederhanakan pengaturan yang diperkenalkan di Django 3.2 sehingga boilerplate berkurang
Peningkatan template
- Variabel
forloop.length ditambahkan sehingga total panjang dapat dirujuk di dalam loop
- Digunakan dalam bentuk
{{ forloop.counter }}/{{ forloop.length }}
- Peningkatan pada tag template
querystring
- Saat mapping kosong,
? kini ditambahkan otomatis agar perilaku tautan tetap konsisten
- Mendukung penggabungan beberapa argumen mapping sehingga kombinasi parameter query menjadi lebih mudah
Penutup
- Django 6.0 melibatkan 174 kontributor dan
mencakup banyak optimasi serta perbaikan bug
- Melalui upgrade ini, keamanan, kemudahan pemeliharaan, dan pengalaman developer (DX) meningkat secara menyeluruh
- Perubahan tambahan dapat dilihat di catatan rilis resmi
Belum ada komentar.