- Flask tabanlı backend odaklı bir web çerçevesi olarak, karmaşık frontend yönetimi olmadan hızlı ve basit durum yönetimi sunar
- HTMX ile birleşen bileşen mimarisi sayesinde, sunucu tabanlı etkileşimli kullanıcı arayüzleri oluşturmayı mümkün kılar
- Dosya tabanlı yönlendirme, esbuild + TailwindCSS varlık hattı, otomatikleştirilmiş dağıtım ortamı gibi modern web yığını entegrasyonları sunar
- E-posta gönderimi (MJML), arka plan işleri, SSE tabanlı push, çeviri, kimlik doğrulama gibi çeşitli yerleşik özellikler içerir
- Konteyner tabanlı geliştirme ve dağıtım ortamı standardizasyonu ile VS Code entegrasyonu sayesinde kolay kurulum ve buluta dağıtım desteği sağlar
Genel Bakış: Flask tabanlı backend odaklı web uygulaması çerçevesi
- Hyperflask, Flask üzerinde çalışan bir Python web çerçevesidir ve backend güdümlü tasarımı hedefler
- Frontend durum yönetiminin karmaşıklığını azaltır ve sunucu merkezli sade bir mimari sunar
- HTMX, TailwindCSS, esbuild gibi modern web teknolojilerini varsayılan olarak içerir
- HTMX entegrasyonu sayesinde sayfanın tamamını yeniden yüklemeden gerçek zamanlı etkileşim sağlanabilir
- Bileşen mimarisi ile backend ve frontend bileşenleri yeniden kullanılabilir
- Flask ortamına bileşen merkezli bir yapı getirerek, frontend ve backend bileşenlerinin Jinja şablonlarında doğrudan kullanılmasını sağlar
- HTMX ile birleşen sunucu backend tipi bileşenler üretilebilir; ayrıca React veya web bileşenleriyle de doğal biçimde entegre olur
- Kod yeniden kullanımını ve bakım kolaylığını artırarak büyük ölçekli uygulama geliştirmeye de uygun bir yapı sunar
- Dosya tabanlı ve uygulama tabanlı yönlendirme desteği
- Python kodu ile Jinja şablonlarını birleştiren yeni bir
.jpy dosya biçimi kullanır
- Astro'nun sayfa sisteminden ilham alarak, rota tanımları ve kullanıcı arayüzü yapılandırmasını tek bir yerde yönetmeyi sağlar
- Böylece yönlendirme yapılandırması sadeleşir ve yeni sayfa eklemek daha sezgisel hale gelir
- Açık ekosistem
- Hyperflask'ın kendi kod tabanı küçüktür ve çeşitli Flask eklentilerini organik biçimde birleştirerek oluşturulmuştur
- Her eklenti bağımsız bir proje olarak yönetilir ve özgürce seçilip birleştirilebilir
- Tüm projeler GitHub'daki Hyperflask organizasyonu altında açık olarak sunulur ve kullanıcıya özel çerçeve yapılandırmalarını teşvik eder
- “Batteries Included”
- MJML e-posta gönderimi, dramatiq arka plan işleri, SSE tabanlı gerçek zamanlı push, gettext tabanlı çeviri (i18n)
- Kimlik doğrulama ve oturum yönetimi, görsel optimizasyonu ve streaming, statik içerik üretimi vb.
- Ayrı yapılandırma gerektirmeden hemen kullanılabilen üretim düzeyinde bir özellik seti sunar
- SQL merkezli ORM (sqlorm), SQLite için optimize edilmiştir
- Ortam yapılandırması ve dağıtım
- Konteyner tabanlı geliştirme/çalıştırma ortamını standartlaştırarak ortam yapılandırma sorunlarını en aza indirir
- VS Code ile sıkı entegrasyon sayesinde yerel geliştirme ve hata ayıklama kolaylaşır
- VPS veya başlıca bulut servislerine kolay dağıtım desteği sunar
Özet
- Hyperflask, Flask ekosistemini genişleterek modern bir tam yığın Python web geliştirme deneyimi sunan yeni nesil bir çerçevedir
- HTMX ve bileşen sistemi, dosya tabanlı yönlendirme, konteynerle standartlaştırılmış geliştirme ortamı sayesinde minimum yapılandırmayla maksimum üretkenlik sağlar
1 yorum
Hacker News yorumu
Hyperflask'ın geliştiricisi olarak, uzun zamandır hazırlandığım projeyi nihayet duyurabilmekten mutluyum
Ayrıntılı duyuru yazısına buradan ulaşabilirsiniz
Her türlü geri bildirimi duymak isterim
Bunun backend'e bağlı olmayan bir kütüphane biçiminde olması daha iyi olurdu gibi geliyor
Zaten bir milyondan fazla satırlık bir Django projem var, bu yüzden kolayca değiştiremiyorum; bunu bir Django uygulamasına kolayca uygulamanın bir yolu var mı merak ediyorum
htmx geliştiricisi olarak bu proje gerçekten harika görünüyor
Bir iş arkadaşım flask/htmx/sqlalchemy kombinasyonuyla dahili bir uygulama yaptı ve iyi sonuç aldı, ancak açık kaynak onayı alamamıştı
Bu yüzden hyperflask'ın yeni denemesini merakla bekliyorum
ORM olarak neden sqlorm seçildiğini merak ediyorum
Uzun süredir Python geliştirmeden uzağım ama herkesin SQLAlchemy kullandığını sanıyordum; sqlorm ise bana yabancı geliyor
Yeni bir framework'ün HTMX'i benimsemiş olması etkileyici
HTMX, JS ve React'e alternatif olabilecek çeşitli yeni eğilimleri tetikliyor
Python ve Flask kombinasyonunu seven çok kişi olacaktır; ayrıca sunucu tarafı HTMX'te bileşenler kilit önem taşıyor
Bir de ana sayfanın FastHTML'den daha rahat okunuyor olması artı bir nokta
harcstack.org ile kıyaslarsak
Bu seçenekler sayesinde çok daha geniş bir kullanıcı kitlesini çekebileceğini düşünüyorum
Karşılaştırılan HARC stack ise HTML'i Elm dilinin sunucu tarafı bir sürümü gibi işlevsel biçimde ele almak isteyenlere ya da Tailwind'in denormalizasyonuna alerjisi olan küçük bir kesime hitap ediyor gibi görünüyor
htmx ile web uygulaması geliştirirken bir noktada bunun bir 'çıkmaz sokak' olduğunu hissettim
Asıl sorun, frontend uygulama durumunun URL'de saklanması gerekmesi
Farklı bölgeler, widget'lar, açılır pencereler vb. her birinin yerel duruma ve gezinmeye ihtiyaç duyduğu modern arayüzlerde, tüm durumu tek bir global URL'ye sığdırmak son derece zor
İhtiyaç halinde durumu URL'ye hiç koymamak da daha zor bir tasarım haline geliyor
React veya Vue gibi kendi durum deposunu sağlayan framework'lerde bu sorun kolayca çözülüyor
phpBB forumu gibi kurgulanırsa sorun olmayabilir ama günümüz kullanıcıları daha gelişmiş bir deneyim bekliyor
Durumu yalnızca URL'de tutmak zorunda değilsiniz
Sunucu depolaması, oturum, localstorage, çerezler gibi çeşitli yöntemler var
Örneğin kullanıcının uygulama yerleşimini özelleştirmesi için URL gerekmez ama arama sonuçları gibi paylaşım gereken durumlarda arama koşullarının mutlaka URL'de olması gerekir
Asıl düşünülmesi gereken, neyi başarmaya çalıştığınızdır
Ayrıca 'modern UI' adı altında çok sayıda widget'ı ve açılır pencereyi tek bir ekrana/tek bir URL'ye doldurmak aslında gereksiz bir karmaşıklık da olabilir
Çoğu zaman React/Vue'nun sunduğu durum saklama, zaten sunucuda yönetilebilecek şeylerin tekrarıdır
Hiper medya yaklaşımı da yeterince karmaşık arayüzleri rahatlıkla yönetebilir
Her şeyi ille de URL'de tutmak zorunda değilsiniz
Durumu sekme bazında paylaşmak ya da yalıtmak için oturumlar, çerezler, sekme kimlikleri vb. kullanılabilir; ardından backend veritabanından durum okunabilir
Hiper medya, gerçek zamanlı/çok oyunculu ortamlarda da çok güçlüdür
Hatta HTMX'in zayıf yanı, durumu backend'de daha fazla tutmaması; keşke bu konuda daha da ileri gitseydi
Bence mesele sadece bunun benim kullanım senaryoma uymaması
React/Vue'ya 'kolay' demeniz de ilginç
React ya da Vue'nun da kullanıcıların beklediği her sorunu çözdüğünü düşünmüyorum
Çok yüksek karmaşıklık gerektiren durumlar dışında ben pratikte çoğu vakayı htmx (unpoly, alpinejs, localstorage kombinasyonuyla) ile sorunsuz şekilde hallediyorum
hyperflask'ta ilginç kavramlar gördüm
Ancak bileşenler aslında içerde sıradan makrolardan ibaret gibi; o halde makroları doğrudan kullanmak daha iyi olmaz mı diye düşündüm
Flask tercihinin nedeni de merak konusu
Geçmişte /dev/push adlı benzer bir yaklaşım denedim ve sonra FastAPI + Jinja2 + Alpine.js + HTMX kombinasyonuna geçtim
FastAPI'nin sadece API için olmadığını fark ettim ve async desteğine ihtiyaç duyduğum için onu seçtim
Flask'ı da seviyorum ama sınırlı kaldığını hissettiğim oldu
View ve controller'ı tek dosyada birleştirme yaklaşımı bana eski PHP geliştirme günlerini hatırlatıyor
Projenin ölçeğine bağlı olarak geliştirmeyi gerçekten basitleştirdiği için avantajlıydı
FastAPI + HTMX kombinasyonunun da oldukça etkili olduğunu düşünüyorum
Django'da edindiğim deneyime göre, admin scaffolding özellikleri sayesinde teşhis ve müşteri desteği için arayüzleri elle yazmaya neredeyse hiç gerek kalmıyordu
Başka framework'lerle yapılan projelerde bu tür özellikleri kendiniz geliştiriyorsunuz ve sonuç çoğu zaman Django kadar tatmin edici olmuyor
Hyperflask gibi çekici görünen pek çok framework var ama Django'nun admin framework'ünden vazgeçmek ciddi bir bedel
Gerçekten Django admin'e alternatif ya da onu ikame eden bir desen bulan var mı merak ediyorum
Ben de aynı şeyi hissettim
FastAPI'ye geçince Django'dan en çok özlediğim şey, projeyi oluşturan çeşitli uygulamalardı
Migration'lar, statik dosyalar, template'ler gibi şeylerin özellik bazlı gruplandırılmış yapısının ne kadar rahat olduğunu sonradan fark ettim
Ben çoğunlukla Supabase kullanıyorum
Acil yönetim işleri için yöneticileri Supabase UI üzerinden eğitip görevlendirebiliyorum
Ya da mümkünse Airtable'ı backend olarak kullanıyorum
Ama çoğu zaman yine Django admin'i çok özlüyorum ve Django+HTMX kombinasyonu her zaman cazip geliyor
Flask-Admin de var ama Django Admin'e kıyasla çok daha basit kalıyor
Gelecekte bu sorunu çözmek isterim
Çeşitli framework'lerle HTMX kullandıktan sonra, Go + Templ + HTMX kombinasyonunun çok yönlülük ile sadeliği iyi bir şekilde birleştirdiğini düşünüyorum
Benim deneyimime göre Go fazla ayrıntılı, bu yüzden aslında Go+Templ+HTMX'ten Flask + Jinja + HTMX'e geçmeyi düşünüyorum
Go'nun template tanımlama biçimi bana yorucu geliyor
Sonraki denemek istediğim kombinasyon kesinlikle FastAPI + Jinja2 + HTMX
Şu anda bu stack'i kullanıyorum
hyperflask, Flask ve htmx'in felsefesiyle tam uyumlu değilmiş gibi geliyor
Çok fazla soyutlama katmanı var ve htmx ile gerçek entegrasyon noktaları da pek görünmüyor
FastHTML gibi htmx'in yerleşik olduğu bir yapı bekliyordum
Bir projede starfield demosu gördüğümde, hep hız ayarı ve fare imlecini takip etme efekti olmasını bekliyorum
Umarım sonraki Hyperflask sürümünde eklenir
Projenin kendisi harika ve Htmx'i seviyorum, ama son zamanlarda Datastar'ı da yakından izliyorum
Konsolda aşağıdaki kodu çalıştırırsanız hız ayarı dahil çeşitli efektler verebilirsiniz
Acaba bunun gibi bir işlevden mi söz ediyorsunuz?
nova.app şimdiye kadar gördüklerim arasında en iyisi
HTMX tabanlı tam kapsamlı bir Fullstack Async deneyim istiyorsanız Litestar'a da bakmaya değer
İlk gördüğümde, Python controller dosyasına HTML template'lerini doğrudan ekleyen yapının neden gerekli olduğunu anlamakta zorlandım
Sanki yalnızca tek bir render fonksiyonunu kaldırmak için daha fazla karmaşıklık eklenmiş gibi geliyor
Benim kaçırdığım noktanın ne olduğunu merak ediyorum
JavaScript dünyasındaki Astro Pages'ten ilham alınmış
Geliştirici deneyimi de gerçekten iyiydi
Pek çok kişi Flask'ın sınırlarından söz edip 'neden FastAPI değil?' diyor ama bence en iyi alternatif Litestar
Litestar, htmx desteğini varsayılan olarak sunuyor
Ayrıntılı bilgiye buradan ulaşabilirsiniz