- 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.