4 poin oleh GN⁺ 2025-12-11 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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.

Belum ada komentar.