· kaynak dev.to (home feed)
WebForms.py 2.1, Python web uygulamalarına sunucu güdümlü UI komutlarını getiriyor
WebForms.py 2.1, WebForms Core modelini Python'a taşıyor: arayüz komutlarını sunucu kuruyor, WebFormsJS tarayıcı kütüphanesi bunları çalıştırıyor; böylece sayfalar her etkileşim için JavaScript yazılmadan güncelleniyor.

WebForms.py 2.1 yayınlandı ve WebForms Core programlama modelini Python web uygulamalarına taşıyor. Elanat Framework projesinin dev.to'daki duyurusuna göre paket, iki parçalı bir mimarinin Python yarısını sunuyor: sunucu arayüzün ne yapacağına karar veriyor, tarayıcı tarafındaki bir kütüphane ise bunu uyguluyor.
Sunucuda komutan, tarayıcıda uygulayıcı
WebForms Core, bir sayfayı güncelleme işini iki role bölüyor. WebForms.py içindeki WebForms sınıfı, projenin Commander adını verdiği şey: geliştirici onu örnekler, istenen değişiklikleri tanımlar ve yanıtını tarayıcıya döndürür. Sayfaya yüklenen bir JavaScript kütüphanesi olan WebFormsJS ise Executor rolünü üstlenir. Yanıtı okur, ilgili HTML elementlerini bulur ve istenen her işlemi onlara uygular.
Duyurunun önerdiği fikir şöyle: bir Python arka ucu, kimsenin her etkileşim için JavaScript yazmasına ve Python'ın doğrudan DOM'a dokunmasına gerek kalmadan kullanıcının gördüğünü değiştirebilir. Sunucu, yapılması istenen değişikliğin bir tanımını yollar; istemci kütüphanesi bu tanımı gerçek güncellemeye dönüştürür.
InputPlace ile element hedefleme
API'nın merkezinde, bir işlemin nereye uygulanacağını belirten InputPlace var. InputPlace.id('result') komutu ID'si result olan elemente yönlendirir; böylece geliştiriciler sayfanın bölümlerine, elle selector yazmadan erişir.
Her komut üç bileşeni birleştirir: InputPlace'den gelen hedef, metod adı olarak işlem ve değer. form.set_text(InputPlace.id('result'), 'Hello from Python!') WebFormsJS'den o elementin metnini değiştirmesini ister; form.increase(InputPlace.id('counter'), 1) counter elementinde gösterilen sayıyı bir artırır. form.response() çağrısı grubu kapatır ve tarayıcı kütüphanesinin tükettiği payload'u üretir. Duyuru ayrıca increase metodunun oyun mantığına göre farklı miktarlar uyguladığını, örneğin demosunda 100, 5 veya 1 puan verdiğini gösteriyor.
Sayfayı yerinde güncelleyen bir Flask demosu
Sürüm notu, Flask üzerine kurulu bir sayı tahmin oyununu adım adım anlatıyor. Sunucu, oyuncunun gönderdiği üç rakamı okur, doğrular, kendisi üç rastgele rakam üretir ve konumları karşılaştırır. Hikaye açısından önemli olan yanıt yolu. Geçersiz girdi, bir uyarı taşıyan tek bir set_text komutu ve ardından form.response() üretir. Geçerli bir tur ise yanıtı döndürmeden önce birkaç komutu birlikte kuyruğa alır: tur sayacını ilerletmek, sunucunun rakamlarını bir elemente yazmak ve iki ayrı elemente bir sonuç ile bir ayrıntı satırı yerleştirmek.
Örnek, modelin temel cazibesini gösteriyor: zaten yüklenmiş sayfanın birkaç bölgesi aynı anda değişiyor; sunucu ise bunu yapmak için ne yeni bir HTML belgesi yolluyor ne de JavaScript dizeleri birleştiriyor.
Neden önemli
Sunucu güdümlü UI, JavaScript ağırlıklı ön uçlara bir yanıt olarak defalarca gündeme geliyor ve WebForms Core, htmx ya da Phoenix LiveView gibi yaklaşımların aynı mahallesinde, kendi komut-yanıt protokolüyle bu soyuluğa katılıyor. Python ekipleri için — duyurunun kendisi de kütüphaneyi Flask ile eşleştiriyor — bu, arayüz mantığını ayrı bir istemci kod tabanında çoğaltmak yerine sunucu kodunun geri kalanının yanında tutmanın bir yolunu sunuyor.
Dikkat edilecek noktalar var. Bu, bağımsız bir haber değil projenin kendi sürüm notu; Flask demosunun ötesinde entegrasyonlar, tarayıcı desteği ve yanıt formatının ölçek altında nasıl davrandığı gibi soruları açık bırakıyor. Yine de 2.1 sürümü, sayfa güncellemelerinin sunucudan güdümlenmesini isteyen Python geliştiricilerine değerlendirebilecekleri somut bir şey veriyor.
- #python
- #flask
- #server-driven-ui
- #webforms
- #javascript