4 puan yazan GN⁺ 2025-12-11 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 20 yıldan uzun bir geçmişe sahip Django 6.0, şablonlar, arka plan görevleri, güvenlik, e-posta gibi kritik alanlarda kapsamlı iyileştirmeler yapan büyük bir sürümdür
  • Template partials özelliğiyle şablon içindeki kodun yeniden kullanımı kolaylaşıyor ve htmx gibi araçlarla entegrasyon güçleniyor
  • Tasks framework eklendi; HTTP istek-yanıt döngüsünün dışında arka plan görevleri çalıştırılabiliyor
  • Content Security Policy (CSP) çekirdeğe dahil edildiği için XSS gibi içerik enjeksiyonu saldırılarına karşı koruma kolaylaştı
  • E-posta API modernizasyonu, ORM geliştirmeleri ve varsayılan anahtar genişletmesiyle geliştirici deneyimi ve ölçeklenebilirlik belirgin biçimde arttı

Django 6.0 Genel Bakış

  • Django 6.0, Python web çerçevesinin yeni bir sürümü ve 20 yıllık gelişimin devamıdır
  • Başlıca değişiklikler; şablonlar, arka plan görevleri, güvenlik ve e-posta işleme olmak üzere dört temel alana odaklanır
  • Resmi sürüm notlarında derlenen ana iyileştirmeler, toplulukta çok sayıda katkıcının katılımıyla hazırlanmıştır

django-upgrade aracı

  • Mevcut projeleri Django 5.2 ve altı sürümlerden yükseltirken django-upgrade aracıyla kodu otomatik dönüştürebilirsiniz
  • Django 6.0 için dahil edilen 5 otomatik düzeltici (fixer) vardır ve bazı uyarılar otomatik olarak çözülür

Template partials

  • Şablon içinde parça tanımlama ({% partialdef %}) işlevi eklendi; bu da kod tekrarını azaltıp yeniden kullanımı kolaylaştırır
    • Aynı şablonda tanımlanan bir partial birden çok kez çağrılabilir
    • inline seçeneğiyle tanımlama sırasında render yapmak mümkündür
  • Kısmi render ile yalnızca belirli bir partial bağımsız olarak render edilebilir
    • Örnekte, htmx kullanılarak view_count bölümü periyodik olarak güncellenir
    • URL’ye #partial_name eklenerek yalnızca ilgili bölüm render edilebilir
  • Bu özellik, Google Summer of Code projesi aracılığıyla Django’ya entegre edilmiş ve önceki django-template-partials paketinden evrilmiştir

Tasks framework

  • Django’ya yeni bir arka plan görevlerini çalıştırma framework’ü eklendi
    • HTTP istek-yanıt döngüsünün dışında kod çalıştırılabilir
    • E-posta gönderimi, veri işleme, rapor üretimi gibi asenkron görevlerde kullanılabilir
  • Görevler @task dekoratörü ile tanımlanır, Task.enqueue() ile kuyruğa eklenir
  • Varsayılan backend’ler; geliştirme için ImmediateBackend ve DummyBackend olmak üzere iki tanedir ve
    django-tasks paketindeki DatabaseBackend ile SQL DB tabanlı çalıştırma yapılabilir
  • db_worker komutuyla işçi başlatılır ve günlükler aracılığıyla durum doğrulanabilir
  • Bu özellik, Wagtail’de doğan fikir doğrultusunda, DEP 0014 önerisinin ardından Django’ya entegre edilmiştir

Content Security Policy(CSP) desteği

  • Django 6.0, CSP standardını yerleşik olarak destekleyerek XSS gibi içerik enjeksiyonu saldırılarına karşı savunmayı güçlendirir
    • ContentSecurityPolicyMiddleware’i MIDDLEWARE’e ekleyerek etkinleştirin
    • SECURE_CSP, SECURE_CSP_REPORT_ONLY ayarlarıyla politika yapılandırılabilir
  • Nonce tabanlı güvenlik yerleşiktir ve <script> ve <style> etiketlerine nonce="{{ csp_nonce }}" özniteliği eklenebilir
    • Her istek için rastgele bir nonce üretilir ve yalnızca güvenilir kaynaklar çalıştırılır
  • CSP, 2004’te önerildikten sonra django-csp paketiyle uygulanmış, bu sürümde ise resmi olarak çekirdeğe alınmıştır

E-posta API güncellemesi

  • Django’nun e-posta işleme mantığı Python 3.6’nın modern e-posta API’sine taşındı
    • Dahili olarak email.message.EmailMessage sınıfını kullanır
    • Mevcut send_mail() ve EmailMessage arayüzleri korunmuştur
  • Yeni API, daha az hata, güvenliğin artışı ve satır içi ek ekleri iyileştirme gibi avantajlar sunar
  • MIMEPart nesnesiyle HTML içeriğine görsel gibi satır içi ekler kolayca eklenebilir
  • Bu değişiklik 2024’te önerildi ve 8 aylık geliştirme sonunda birleştirildi

E-posta API’sinde konumsal argüman sınırlaması

  • django.core.mail API’sinde bazı parametreler yalnızca anahtar kelime argümanı olarak kabul edilir
    • fail_silently gibi opsiyonel argümanlar konumsal argüman olarak iletilirse uyarı üretilir
    • Bu hamle okunabilirlik ve sürdürülebilirliği artırmak için yapılmıştır
  • django-upgrade aracındaki mail_api_kwargs fixer ile otomatik olarak düzeltilebilir

Shell otomatik import genişletmesi

  • Django 5.2’deki otomatik model import özelliği genişletildi;
    settings, connection, models, functions, timezone gibi öğeler otomatik olarak import ediliyor
  • ./manage.py shell -v 2 komutuyla otomatik import edilenler listelenebilir
  • Geliştirici rahatlığı artar ve tekrarlayan kod azaltılmış olur

ORM geliştirmesi: save() sonrası dinamik alan güncellemesi

  • GeneratedField veya ifade tabanlı alanlar save() sonrasında otomatik güncellenir
    • RETURNING ifadesini destekleyen DB’lerde (SQLite, PostgreSQL, Oracle) anında yansır
    • MySQL ve MariaDB’de gecikmeli yükleme ile otomatik güncelleme yapılır
  • Ek sorgu olmadan en son değerleri doğrudan kullanabilmek verimliliği artırır

Evrensel StringAgg aggregate işlevi

  • StringAgg aggregate fonksiyonu artık tüm veritabanı backendlerinde kullanılabiliyor
    • Giriş değerlerini ayırıcı (delimiter) ile birleştirilen bir string döner
    • PostgreSQL’e özgü bir işlevken artık django.db.models içinde doğrudan kullanılabiliyor
  • Value() ifadesiyle ayırıcı belirtilebilir

BigAutoField’ı varsayılanlaştırma

  • DEFAULT_AUTO_FIELD değeri BigAutoField olarak değiştirildi
    • 64 bit tamsayı türü birincil anahtar kullanarak Primary Key tükenmesi sorunu önlenir
    • Yeni projelerde ekstra ayar olmadan otomatik olarak uygulanır
  • Django 3.2’de getirilen ayar, böylece kolaylaştırılarak boilerplate azaltıldı

Şablon iyileştirmeleri

  • forloop.length değişkeni eklendi; döngüde toplam uzunluğa erişilebilir
    • {{ forloop.counter }}/{{ forloop.length }} biçiminde kullanılır
  • querystring şablon etiketleri iyileştirildi
    • Boş mapping verildiğinde ? otomatik eklenerek link davranışı tutarlılaştırıldı
    • Çoklu mapping argümanı birleştirme desteklenerek sorgu parametrelerini birleştirmek kolaylaştı

Sonuç

  • Django 6.0’a 174 katkıcı katıldı ve
    çok sayıda optimizasyon ile hata düzeltmesi içeriyor
  • Yükseltme, genel olarak güvenlik, sürdürülebilirlik ve geliştirici deneyimi (DX) açısından iyileştirme sağlıyor
  • Ek değişiklikler için resmi sürüm notlarına bakılabilir

Henüz yorum yok.

Henüz yorum yok.