Django 6 sürümü
(docs.djangoproject.com)- Django web çatısı 6.0 sürümü yayınlandı ve Python 3.12+ desteğiyle güvenlik, şablon ve asenkron özelliklerinde ciddi iyileştirmeler getirildi
- Content Security Policy (CSP) varsayılan olarak yerleşik olduğu için XSS gibi içerik enjeksiyonu saldırılarına karşı koruma politikaları ayarlanabiliyor
- Template Partials ile şablon içinde yeniden kullanılabilir bölümler tanımlanabildiğinden kod modülerliği iyileşiyor
- Background Tasks çatısı eklendi ve istek-yanıt döngüsünün dışında asenkron görevlerin çalıştırılması desteklendi
- Python'un modern e-posta API'si benimsendi, MariaDB 10.5 desteği sonlandırıldı,
DEFAULT_AUTO_FIELDvarsayılanı değiştirildi ve bu sayede uyumluluk ayarları ve modernizasyon gerçekleştirildi
Python uyumluluğu
- Django 6.0, Python 3.12, 3.13, 3.14'ü destekler ve her serinin yalnızca en son yayımlanan sürümünü resmi olarak destekler
- Django 5.2.x, Python 3.10 ve 3.11 destekleyen son sürümdür
- Django 6.0 sonrasında üçüncü taraf uygulamaların, Django 5.2'den eski sürümleri desteklememesi önerilir
Temel yeni özellikler
Content Security Policy (CSP) desteği
- Django'da CSP standardı yerleşik olarak gelir ve XSS gibi içerik enjeksiyonu saldırılarına karşı koruma güçlendirilir
ContentSecurityPolicyMiddleware,csp()bağlam işleyicisi veSECURE_CSPayarı ile politika tanımlanabilir- Python sözlüğü tabanlı yapılandırma ile açık ve güvenli bir politika oluşturma desteği sağlanır
SECURE_CSP_REPORT_ONLYile izleme modu ayarlanabilir- Görünüm düzeyinde politikayı geçersiz kılmak veya devre dışı bırakmak için bir dekoratör sunulur
Template Partials
- Şablon parçaları (fragment) tanımlayıp yeniden kullanmak için
partialdefvepartialetiketleri eklendi template_name#partial_namesözdizimiyleget_template(),render(),{% include %}içinde doğrudan referans vermek mümkün- Mevcut üçüncü taraf
django-template-partialspaketi kullanıcıları için bir geçiş kılavuzu sağlanıyor
Background Tasks çatısı
- Django'ya asenkron görev çalıştırmaya yönelik yerleşik bir çatı eklendi
- E-posta gönderimi, veri işleme gibi işlemler HTTP istek-yanıt döngüsünün dışında yapılabilir
- Görevler
@taskdekoratörüyle tanımlanır,enqueue()ile kuyruğa eklenir
- Arka uç,
TASKSayarıyla belirlenir; geliştirme ve test için iki adet varsayılan arka uç dahil edilir - Django yalnızca görev oluşturma ve kuyruklama işlerini üstlenir; çalıştırma dışarıdaki bir worker süreci tarafından yapılır
Python modern e-posta API'sinin benimsenmesi
- Django'nun e-posta işleme mantığı Python 3.6 sonrası modern e-posta API'sine (
email.message.EmailMessage) geçmiştir - Eski
SafeMIMETextveSafeMIMEMultipartsınıfları artık kullanılmıyor EmailMessage.message()dönüş tipi Python'ınEmailMessageörneği olarak değiştirildi
Ayrıntılı geliştirmeler
Admin
- Font Awesome Free 6.7.2 simge seti uygulandı
AdminSite.password_change_formözelliği ile yönetici şifre değiştirme formu özelleştirilebiliyormessages.DEBUGvemessages.INFOiçin ayrı simgeler ve CSS stilleri eklendi
Kimlik doğrulama
- PBKDF2 hash yineleme sayısı 1.000.000 → 1.200.000 seviyesine çıkarıldı
GIS
GEOSGeometry.hasmözelliğiyle M boyutunun mevcut olup olmadığı kontrol edilebiliyorRotateişleviyle belirli açıyla döndürme desteği eklendiBaseGeometryWidget.base_layerözelliğiyle harita tile sağlayıcısı özelleştirilebiliyor- MariaDB 12.0.1 ve üzeri sürümlerde
coveredby,isvalid,GeoHash,IsValidgibi işlevler destekleniyor - Widget render edilirken satır içi JavaScript kaldırıldı, özelleştirme için şablonun güncellenmesi gerekiyor
PostgreSQL
- Lexeme ifadeleri eklenerek tam metin araması sorgu kontrolü güçlendirildi
CreateExtensiongibi eklenti işlemlerinehintsparametresi eklendidjango.contrib.postgresalanları, dizinleri ve kısıtlamaları için sistem kontrolü eklendi
Staticfiles
ManifestStaticFilesStorage, gereksiz diff'i azaltmak için yol sıralama tutarlılığı sağlarcollectstatickomutu varsayılan olarak yalnızca özeti yazdırır; ayrıntılı bilgi--verbosity 2ve üzeri seviyede görünür
Diğer
- Haitian Creole dili desteği eklendi
startproject,startappkomutları var olmayan dizinleri otomatik oluşturuyorshellkomutundadjango.conf.settingsgibi temel yardımcılar otomatik içe aktarılır- Migasyonlarda
zoneinfo.ZoneInfoserileştirmesi destekleniyor StringAgg,AnyValuegibi yeni toplama işlevleri eklendiAsyncPaginator,AsyncPageile asenkron sayfalama desteği geldi- ASGI'de HTTP/2 çoklu Cookie başlığı desteği
- Şablonda
forloop.lengthdeğişkeni eklendi,querystringetiketi geliştirildi DiscoverRunner,forkservertabanlı paralel testleri destekliyor
Geriye dönük uyumsuzluklar
Veritabanı arka ucu API'si
BaseDatabaseSchemaEditorile PostgreSQL arka ucu, sütun silinirkenCASCADEkullanımını bırakıyorreturn_insert_columns()→returning_columns()gibi yöntem adı değişiklikleriUPDATE … RETURNINGdesteğindeDatabaseFeatures.can_return_rows_from_update=Trueayarı mümkün oldu
Kullanımdan kaldırma
- MariaDB 10.5 desteği sonlandı (en az 10.6 gerekli)
- Python 3.12 altı desteği kaldırıldı
- Temel kütüphane minimum sürümleri:
aiosmtpd 1.4.5,bcrypt 4.1.1,Pillow 10.1.0,psycopg 3.1.12vb.
- Temel kütüphane minimum sürümleri:
E-posta
mixed_subtype,alternative_subtype,encodingözellikleri kaldırıldı- İçsel uygulama değişikliği nedeniyle özel EmailMessage alt sınıflarının yeniden kontrol edilmesi gerekiyor
DEFAULT_AUTO_FIELD varsayılanının değiştirilmesi
- Varsayılan değer
AutoField→BigAutoFieldolarak değişti - Django 3.2'den sonra uyarı (
models.W042) işlemeyen projeler, ayar eklemelidir
ORM ifadeleri
as_sql()metodunun dönüş parametresi tuple formatında olmalı
Diğer
- JSON serileştirme her zaman satır sonu ekliyor
asgirefminimum sürümü 3.9.1 olarak yükseltildi
Yakında kaldırılacak özellikler
django.core.mail API'si
get_connection(),send_mail()gibi yöntemlerde isteğe bağlı argümanların yalnızca anahtar kelime argümanı olarak verilmesi gerekiyorEmailMessage,EmailMultiAlternativesoluşturulurken ilk 4 argüman dışındaki tüm argümanlar yalnızca anahtar kelime argümanı olabilir
Diğer
BaseDatabaseCreation.create_test_db(serialize)kaldırılıyor, yerineserialize_db_to_string()kullanılmalı- PostgreSQL'e özel
StringAgg,OrderableAggMixinkaldırılıyor urlize,urlizetruncvarsayılan protokolünün Django 7.0'da HTTPS'e çevrileceği planlanıyorADMINS,MANAGERSayarları (ad, e-posta) çiftliği yerine e-posta dizesi listesi ile belirtilmeliSafeMIMEText,SafeMIMEMultipart,BadHeaderErrorgibi e-posta ile ilgili sınıflar kaldırılıyor
Kaldırılan özellikler
BaseConstraintkonumsal argüman desteği kaldırıldıDjangoDivFormRenderer,Jinja2DivFormRenderersilindicx_Oracleveritabanı sürücüsü desteği kaldırıldıforms.URLFieldvarsayılan şema değeri"http"→"https"olarak değiştiModel.save()veModel.asave()konumsal argüman desteği kaldırıldıModelAdmin.log_deletion(),LogEntryManager.log_action()kaldırıldıdjango.utils.itercompatmodülü kaldırıldıGeoIP2.coords(),GeoIP2.open()yöntemleri kaldırıldıForeignObject.get_joining_columns()ve ilişkili yöntemler kaldırıldı
Django 6.0, güvenlik iyileştirmeleri, asenkron işleme yetenekleri ve modern e-posta API'si sayesinde çerçevenin güvenilirliğini ve ölçeklenebilirliğini artırırken Python 3.12+ ortamına geçişi netleştiriyor.
1 yorum
Hacker News yorumu
Eskiden çalıştığım bir kurumda NodeJS+React ile yazılmış ‘modern’ bir kod tabanı ve yaklaşık 15 yıllık bir Python 2.7 tabanlı Django legacy uygulaması vardı
Başta eski kodun acı verici olacağından endişelenmiştim ama tam tersi çıktı
Django uygulamasıyla uğraşmak keyifliydi ve onu toparlama süreci gerçekten çok eğlenceliydi. Yeni Go/React yeniden yazımı ile değiştirileceği zaman geldiğinde üzüleceğim gibi görünüyor
Django ekibini tebrik ediyorum
Uzun süredir Docker Compose tabanlı Django + Celery + Postgres + Redis + esbuild + Tailwind başlangıç uygulamasını sürdürüyorum ve yakın zamanda Django 6.0’a uygun olacak şekilde güncelledim
GitHub deposunda görülebilir
Henüz CSP ayarlarını varsayılan olarak eklemedim, biraz daha inceledikten sonra eklemeyi planlıyorum
Django’nun “batteries included” felsefesi, yapay zeka ile kod üretimine mükemmel uyuyor
Yönetici paneli, giriş, parola sıfırlama gibi temel özellikler zaten iyi durumda olduğu için, yapay zeka küçük bir kod tabanıyla bile eksiksiz bir site oluşturabiliyor
Kod küçük ve net olduğu için yapay zekanın tekrar tekrar iyileştirme yapması da kolaylaşıyor
Devasa bileşenler yerine net modeller ve şablonlar var; bu da yapay zekanın ürettiği kodu gözden geçirmeyi kolaylaştırıyor
Ayrıca Django admin, bağımsız bir ground truth olarak var olduğu için frontend bozulsa bile verilerle çalışılabiliyor
Yalnız Python ekosisteminin gevent modelini benimsememiş olması üzücü. Öyle olsaydı asenkron yapıya geçiş çok daha pürüzsüz olurdu
Flask veya FastAPI gibi gevşek bağlı framework’lere kıyasla çok daha entegre
Bu fark sonuçta sayısız küçük can sıkıcı sürtünmeyi (papercuts) azaltıyor
Eski bir .NET uygulamasını yeniden yazdım; Rails neredeyse kusursuz dönüştürürken Django zorlandı
Bu sürümdeki template partials özelliği oldukça iyi görünüyor
Ama tip anotasyonları (type annotations) durumu hâlâ sıkıntılı
django-stubs mypy eklentisi gerektiriyor, django-types ise pyright için bir fork ama senkronizasyonu iyi değil
pylance da ayrıca kendi fork’unu kullanıyor
Umarım bir sonraki sürümde en azından HttpRequest, HttpResponse, View, Model gibi temel tipler resmi olarak dahil edilir
Django sayesinde web geliştirme gerçekten keyifliydi
Başka framework’lere geçsem de sonunda yine Django’ya dönüyorum. Pişmanlık yaratmayan bir seçim oldu
Başka framework’leri denesen de Rails’in rahatlığı yüzünden geri dönüyorsun
Yalnız Rails’te varsayılan bir Admin UI olmaması üzücü
Tam bir full-stack deneyim istiyorsan Laravel ya da Rails’e bakmak daha iyi
PHP günlerinden beri web ile uğraşıyorum ama Django bana hep eh işte hissi verdi
Django benim ilk büyük freelance projemdi ve hâlâ bana tanıdık ve rahat geliyor
Birçok deneysel şey denedim ama hep iyi çalıştı. Django’ya teşekkürler
Neredeyse 15 yıldır Django’yu neredeyse tek başına kullanıyorum
Başka birçok framework denedim ama hiçbiri Django kadar elime oturmadı
Bu sürümde task framework eklediler ama backend ve worker içermemesi biraz hayal kırıklığı yarattı
Keşke bir sonraki sürümde tam haliyle gelse
Django’nun dahil her şey yaklaşımı (batteries included) sayesinde ölçekten bağımsız olarak her projeye uygun olduğunu düşünüyorum
Ekibe ve katkı sağlayanlara övgüler
SPA çağının nasıl başladığını merak ediyorum. Sadece yükleme spinner’larını kaldırmak için miydi, yoksa daha derin bir sebebi var mıydı, bilmek isterim
Web, iOS ve Android’in tek bir backend’i paylaşmasını sağlama ihtiyacı, doğal olarak SPA kalıbını yaygınlaştırdı
Ben hâlâ SPA geliştiriyorum ama bir gün büyük bir projeyi Django + htmx ile yapmak isterim
Sayfa yenilemeden uygulama gibi çalışması çekiciydi ama pratikte zorunlu tam yenileme gereken durumlar da oluyordu
Yine de veriyle sunumu ayıran yapının zarif olduğunu düşünüyorum
Bu yüzden JS ile belgeleri uygulamaya dönüştürme çabaları peş peşe geldi
Sonunda frontend ile backend ayrıldı, API sözleşmeleri ve doğrulama süreçleri ortaya çıktı
Daha sonra yine server component’lerle birleşmeye dönük bir akım doğdu ve şu an tam o noktadayız
Bu arada eski usul web formu örneğini bu bağlantıda görebilirsiniz
Bu yüzden ben TypeScript tabanlı build sürecini tercih etmeye başladım
Django kullandığım her seferinde sadece keyif alıyorum. Hepsi bu kadar