6 puan yazan GN⁺ 2025-12-05 | 1 yorum | WhatsApp'ta paylaş
  • 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_FIELD varsayı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 ve SECURE_CSP ayarı 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_ONLY ile 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 partialdef ve partial etiketleri eklendi
  • template_name#partial_name sözdizimiyle get_template(), render(), {% include %} içinde doğrudan referans vermek mümkün
  • Mevcut üçüncü taraf django-template-partials paketi 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 @task dekoratörüyle tanımlanır, enqueue() ile kuyruğa eklenir
    Reklam
  • Arka uç, TASKS ayarı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 SafeMIMEText ve SafeMIMEMultipart sınıfları artık kullanılmıyor
  • EmailMessage.message() dönüş tipi Python'ın EmailMessage ö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ştirilebiliyor
  • messages.DEBUG ve messages.INFO iç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 edilebiliyor
  • Rotate işleviyle belirli açıyla döndürme desteği eklendi
  • BaseGeometryWidget.base_layer özelliğiyle harita tile sağlayıcısı özelleştirilebiliyor
  • MariaDB 12.0.1 ve üzeri sürümlerde coveredby, isvalid, GeoHash, IsValid gibi 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
  • CreateExtension gibi eklenti işlemlerine hints parametresi eklendi
  • django.contrib.postgres alanları, dizinleri ve kısıtlamaları için sistem kontrolü eklendi

Staticfiles

  • ManifestStaticFilesStorage, gereksiz diff'i azaltmak için yol sıralama tutarlılığı sağlar
  • collectstatic komutu varsayılan olarak yalnızca özeti yazdırır; ayrıntılı bilgi --verbosity 2 ve üzeri seviyede görünür
Reklam

Diğer

  • Haitian Creole dili desteği eklendi
  • startproject, startapp komutları var olmayan dizinleri otomatik oluşturuyor
  • shell komutunda django.conf.settings gibi temel yardımcılar otomatik içe aktarılır
  • Migasyonlarda zoneinfo.ZoneInfo serileştirmesi destekleniyor
  • StringAgg, AnyValue gibi yeni toplama işlevleri eklendi
  • AsyncPaginator, AsyncPage ile asenkron sayfalama desteği geldi
  • ASGI'de HTTP/2 çoklu Cookie başlığı desteği
  • Şablonda forloop.length değişkeni eklendi, querystring etiketi geliştirildi
  • DiscoverRunner, forkserver tabanlı paralel testleri destekliyor

Geriye dönük uyumsuzluklar

Veritabanı arka ucu API'si

  • BaseDatabaseSchemaEditor ile PostgreSQL arka ucu, sütun silinirken CASCADE kullanımını bırakıyor
  • return_insert_columns()returning_columns() gibi yöntem adı değişiklikleri
  • UPDATE … RETURNING desteğinde DatabaseFeatures.can_return_rows_from_update=True ayarı 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.12 vb.

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 AutoFieldBigAutoField olarak değişti
  • Django 3.2'den sonra uyarı (models.W042) işlemeyen projeler, ayar eklemelidir
Reklam

ORM ifadeleri

  • as_sql() metodunun dönüş parametresi tuple formatında olmalı

Diğer

  • JSON serileştirme her zaman satır sonu ekliyor
  • asgiref minimum 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 gerekiyor
  • EmailMessage, EmailMultiAlternatives oluş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, yerine serialize_db_to_string() kullanılmalı
  • PostgreSQL'e özel StringAgg, OrderableAggMixin kaldırılıyor
  • urlize, urlizetrunc varsayılan protokolünün Django 7.0'da HTTPS'e çevrileceği planlanıyor
  • ADMINS, MANAGERS ayarları (ad, e-posta) çiftliği yerine e-posta dizesi listesi ile belirtilmeli
  • SafeMIMEText, SafeMIMEMultipart, BadHeaderError gibi e-posta ile ilgili sınıflar kaldırılıyor

Kaldırılan özellikler

  • BaseConstraint konumsal argüman desteği kaldırıldı
  • DjangoDivFormRenderer, Jinja2DivFormRenderer silindi
  • cx_Oracle veritabanı sürücüsü desteği kaldırıldı
  • forms.URLField varsayılan şema değeri "http""https" olarak değişti
  • Model.save() ve Model.asave() konumsal argüman desteği kaldırıldı
  • ModelAdmin.log_deletion(), LogEntryManager.log_action() kaldırıldı
  • django.utils.itercompat modü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

 
GN⁺ 2025-12-05
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

    • Neden illa değiştirmek istediklerini anlamıyorum. Bozuk değilse tamir etmeye gerek yok
  • 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

    • Yer işaretlerine ekleyecektim ama zaten Aralık 2023’te kaydettiğimi fark ettim
    • Nick’in depoları her zaman birinci sınıf oluyor. Ben de kendi materyallerimde sık sık referans veriyorum. Herkese açık paylaştığın için teşekkürler
    • Birkaç yıl önce bir projede bu şablonu kullanmıştım, gerçekten harikaydı
    • Yakın zamanda uv eklenmesini görünce düzenli olarak bakım yapıldığını hissettim
  • 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

    • Django’nun avantajı insanın okuyabileceği bir kod yapısına sahip olması
      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
    • Django’nun INSTALLED_APPS yapısı sayesinde uygulama bazında özellik ekleyip çıkarmak kolay
      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
    • Hem Django hem Rails kullandım; Claude Code ile test ettiğimde Rails çok daha iyi çalıştı
      Eski bir .NET uygulamasını yeniden yazdım; Rails neredeyse kusursuz dönüştürürken Django zorlandı
    • Aslında Ruby on Rails, CSP, background worker’lar ve başka pek çok özelliği çok daha önce varsayılan olarak sunuyordu
    • Django, açık kaynak projelerde çok uzun süredir kullanıldığı için, yapay zekanın eğitim alabileceği kod verisi bol miktarda var
  • 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

    • Ben Ruby on Rails ile aynı deneyimi yaşadım
      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ü
    • Sadece backend’e bakarsan Django harika ama frontend tarafında hâlâ taş devrinde
      Tam bir full-stack deneyim istiyorsan Laravel ya da Rails’e bakmak daha iyi
    • Açıkçası Django’nun cazibesini pek anlamıyorum
      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 o çizgiyi geçmeyi planlayıp planlamadığını merak ediyorum. Framework felsefesi gereği sınırlarını korumaya önem verecek gibi duruyor
    • Mükemmeliyet iyinin düşmanı olmamalı. Django sonuçta “deadline’ı olan mükemmeliyetçiler” için bir framework
  • 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

    • Ana nedenlerden biri mobil uygulamaların ortaya çıkışıydı
      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
    • Eskiden Angular ile veri görselleştirme yaparken SPA’ye geçmiştim
      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
    • Web aslında belge render etmek için tasarlanmıştı ama kullanıcılar uygulama istiyordu
      Bu yüzden JS ile belgeleri uygulamaya dönüştürme çabaları peş peşe geldi
    • İnternetin yavaş, backend doğrulamasının da yavaş olduğu dönemlerde form doğrulaması için JS eklenmeye başlandı ve işler giderek karmaşıklaştı
      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
    • Django ya da Rails gibi şablon sistemlerinde tip güvenliği eksikti
      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