5 büyük ve güçlü Python web çerçevesi

İlk bakışta mütevazı görünen bir web sitesi veya hizmet için bir arka uç oluşturduğunuzda, bunun dışında bir şey olduğunu hemen görebilirsiniz. "Basit" bir site bile bir karmaşıklık kovanı haline gelir. Kullanıcı yönetimi, veri tasarımı, form gönderimleri, güvenlik — bunların hepsini elle uygulamak sıkıcı bir hal alır.

Bu büyük web projeleri için, her şeye ve mutfak lavabosuna ihtiyacınız olacağını bildiğinizde, pillerin (ve şarj cihazlarının) dahil olduğu bir çerçeveye geçmek en iyisidir. İşte size sağlam web uygulamaları oluşturmak için ihtiyacınız olan her şeyle birlikte gelen Python için beş ağır web çerçevesi ve daha sonra bazıları.

CubicWeb

CubicWeb, "yeniden kullanımı ve nesneye yönelik tasarımı destekleyen anlamsal bir web uygulama çerçevesi" olarak faturalandırılır. Rick Grehan'ın 2011'de yeniden gözden geçirdiğinde belirttiği gibi, soyutlamaların ve "küpler" adı verilen yeniden kullanılabilir kod yapı taşlarının kullanımını vurgulayan ilginç bir sistem. Aslında, CubicWeb bazı geliştiriciler için çok soyut veya kendine özgü olabilir ve geliştirme hızı ve özellik seti diğer çerçeveleri geciktirebilir.

Küpler, bir şema (veri modeli), varlıklar (programlama mantığı) ve görünümler içeren yazılım bileşenleridir. Her biri kendi görevini yerine getiren birden fazla küpü bir araya getirerek, kendi kodunuzu ve diğerlerinin kodunu yeniden kullanarak yazılım uygulamaları oluşturabilirsiniz.

CubicWeb özünde, her web uygulaması tarafından kullanılan temel yapı iskelesi sağlar: veri bağlantıları ve depolama için bir “havuz”; temel HTTP isteği / yanıtı ve CRUD eylemleri için bir "web motoru"; ve verileri modellemek için bir şema. Bunların tümü Python sınıf tanımlarında açıklanmıştır.

CubicWeb örneklerini kurmak ve yönetmek için, Django için kullanılana benzer bir komut satırı aracıyla çalışırsınız. Yerleşik bir şablon oluşturma sistemi, programlı olarak HTML çıktısı oluşturmanıza olanak tanır. Bootstrap HTML çerçevesi gibi web kullanıcı arayüzleri için araçlar sağlayan bir küp de kullanabilirsiniz.

CubicWeb, Python 3'ü desteklese de (sürüm 3.23'ten beri), Python 3'ün yerel eşzamansız işlevselliğini kullanıyor görünmemektedir. Eşzamansız dahil etmenin dolambaçlı bir yolu, Pyramid çerçevesini web sunucusu olarak kullanmak için cubicweb.pyramid modülünü kullanmak ve eşzamansız yapılar kullanan bir Piramit çatalını çizmektir. Cubicweb-worker küpü ile eşzamansız olarak görevler gerçekleştirmek de mümkündür. Ancak daha basit bir şey şimdilik ulaşılamaz görünüyor.

Bir CubicWeb uygulamasında kalıcı verileri almak veya işlemek için, belirsiz bir şekilde SQL benzeri sözdizimi kullanan ancak W3C'nin SparQL'inden sonra desenlenen İlişki Sorgu Dili'ni (RQL) kullanırsınız. CubicWeb'in bunun gerekçesi, yine soyutlamadır: RQL, çeşitli veri kaynaklarını birbiriyle ilişkilendirmek için oldukça ayrıştırılmış bir yol sağlar.

CubicWeb'in birçok bağımlılığı olduğundan, pip installhepsini almak için kullanmak en iyisidir . Ayrıca yerel ortamda belirli bir miktarda manuel ince ayar yapmanız gerekebilir. Bu, pip installçerçevenin kodunu çalıştırmanın veya başka bir projenin bir alt klasörüne bırakmanın gerekli olan tek şey olduğu diğer çerçevelerin aksine . Veya işleri çalıştırmak için bir Docker konteyneri kullanabilirsiniz.

CubicWeb, uzun belgelerinden "kitap" olarak bahsediyor. Kitabın yazarları, CubicWeb'in alışılmadık yaklaşımını açıklamak, bazı temel uygulamaların nasıl geliştirileceğini göstermek, API referansları eklemek ve genel olarak spesifik olmak için kendi yollarından çıkmak için zaman ayırdılar.

CubicWeb, yavaşsa, geliştirme aşamasındadır. CubicWeb 4.0 için planlar 2012'den beri gözden geçiriliyor, ancak bunu teslim etmek için henüz bir zaman çizelgesi sunulmadı.

Django

Django'nun ilk ortaya çıkışından bu yana geçen on yılda ve değişimde, web uygulamaları oluşturmak için Python'un en yaygın kullanılan çerçevelerinden biri haline geldi. Django, ihtiyacınız olabilecek her pil ile birlikte gelir, bu da onu büyük uygulamalar oluşturmak için küçük olanlardan daha uygun hale getirir.

Django, 1.x sürümünde uzun yıllar geçirdi. Django 2.0, 2017'nin sonlarında geldiğinde, Python 2 ile uyumluluğu Python 3.4 ve üzeri lehine bıraktı. Aralık 2019'da piyasaya sürülen Django 3.0, Python 3.6 veya daha üstünü gerektirir ve Python web uygulamaları için yeni eşzamansız ASGI standardı için destek ekler.

Django'nun çekiciliğinin önemli bir kısmı konuşlandırma hızıdır. Django, ortalama bir web uygulamasını geliştirmek için ihtiyacınız olan çok sayıda parça içerdiğinden, hızlı bir şekilde hareket edebilirsiniz. Yönlendirme, URL ayrıştırma, bir ORM (nesne-ilişkisel eşleştirici) içeren veritabanı bağlantısı, form doğrulama, saldırı korumaları ve şablon oluşturma, hepsi yerleşiktir.

En yaygın web uygulama senaryoları için yapı taşları bulacaksınız. Örneğin, kullanıcı yönetimi çoğu web sitesinde bulunur, bu nedenle Django bunu standart bir öğe olarak sunar. Django, kullanıcı hesaplarını, oturumları, parolaları, oturum açma / kapatma işlemlerini, yönetici izinlerini vb. İzlemek için kendi sisteminizi oluşturmak zorunda kalmadan, bu özellikleri yerel olarak sağlar. Olduğu gibi kullanılabilir veya minimum çalışma ile yeni kullanım durumlarını kapsayacak şekilde genişletilebilirler.

Django, web uygulamanızı saldırılardan korumaya yardımcı olan mantıklı ve güvenli varsayılanlara sahiptir. HTML veya JavaScript içeren bir dize gibi bir sayfa şablonuna bir değişken yerleştirdiğinizde, değişkenin örneğini güvenli olarak açıkça belirtmediğiniz sürece içerik tam anlamıyla işlenmez. Bu kendi başına birçok yaygın siteler arası komut dosyası oluşturma sorununu ortadan kaldırır. Form doğrulama gerçekleştirmek istiyorsanız, basit CSRF korumasından ayrıntılı hata geri bildirimi döndüren tam gelişmiş alan bazında doğrulama mekanizmalarına kadar her şeyi kullanabilirsiniz.

Django'nunki kadar zengin ve geniş bir özellik seti, sağlam belgeler olmadan pek iyi olmaz. Django dokümantasyonu, çerçevenin her yönünü birden çok açıdan derinlemesine inceliyor. Python 3 veya dilin diğer türleri ile çalışmak, güvenliği doğru yapmak, ortak web uygulama bileşenlerini uygulamak (oturumlar veya sayfalandırma gibi), site haritaları oluşturmak - bunların hepsi kapsanmaktadır. Uygulamanın her katmanı (model, görünüm ve şablon) için API'ler de ayrıntılı olarak açıklanmıştır.

Ancak büyük güç, büyük bir karmaşıklık getirir. Django uygulamaları, çok sayıda hareketli parça ile dolu, çok ağır olma konusunda bir üne sahiptir. Basit bir Django uygulaması bile çalışmaya başlamak için makul miktarda yapılandırma gerektirir. Amacınız birkaç basit REST uç noktası oluşturmaktan biraz daha fazlasını yapmaksa, Django neredeyse kesinlikle abartılıdır.

Django'nun tuhaflıkları da var. Örneğin, sayfa şablonları çağrılabilirleri kullanamaz. Örnek: {{user.name}}Bir şablonda bileşen olarak geçirebilirsiniz , ancak geçemezsiniz {{user.get_name()}}. Bu, Django'nun şablonların yanlışlıkla sizi ayağınıza çekmemesini sağlama yollarından biridir, ancak bu kısıtlamalar eğer hazır değilseniz sarsıcı olabilir. Geçici çözümler varken, performansa zarar verme eğilimindedirler.

Sürüm 3.0'dan itibaren Django, eşzamansız görünümler için destek ekledi. Ne yazık ki, ORM gibi Django yığınının diğer bölümlerinde eşzamansız için henüz destek yok. Ancak asenkron görünümlerden tam anlamıyla yararlanmak için ASGI kullanarak Django'yu dağıtabilirsiniz.

Web2py

Ruby programlama dünyasında, Ruby on Rails fiili web çerçevesidir. DePaul Üniversitesi bilgisayar bilimleri profesörü Massimo Di Pierro, Python'da kurulumu ve kullanımı benzer şekilde kolay olan bir web çerçevesi oluşturmak için Rails'den ilham aldı. Sonuç Web2py'dir.

Web2py'nin en büyük cazibesi, yerleşik geliştirme ortamıdır. Bir Web2py örneğini kurduğunuzda, bir web arayüzü, esasen uygulamanın bileşenlerini yapılandırabileceğiniz çevrimiçi bir Python uygulama düzenleyicisi sağlanır. Bu genellikle, her biri Python modülleri veya HTML şablonları aracılığıyla açıklanan modeller, görünümler ve denetleyiciler oluşturmak anlamına gelir. Birkaç örnek uygulama, Web2py ile kutudan çıkar. Bunları nasıl çalıştıklarını görmek için parçalarına ayırabilir veya kendi uygulamalarınızı oluşturmak için bunları başlangıç ​​şablonları olarak kullanabilirsiniz.

Geliştiriciler genellikle kaynak kodunu indirerek ve bunun üzerine inşa ederek Web2py'yi kurarlar. Ancak Windows veya MacOS'taki daha az teknik kullanıcılar için, Web2py'nin yaratıcıları esasen bağımsız sunucular olan sürümler sunar. Bu sürümlerden birini indirin, paketini açın ve çalıştırın; yerleşik Web2py'nin önceden yapılandırılmış bir kopyasına sahip yerel bir web sunucunuz olur. Bu, daha sonra gerektiğinde başka bir yere yerleştirilebilen bir Web2py uygulaması oluşturmanın güzel bir yoludur.

Web2py'nin web arayüzü Bootstrap 4 ile oluşturulmuştur, bu nedenle gözleri yormaz ve gezinmesi kolaydır. Tarayıcı içi düzenleyici, tam gelişmiş bir IDE'nin yerini tutmaz, ancak satır numaralandırma ve Python sözdizimi vurgulama (otomatik girinti dahil) gibi yardımcı yardımcılarla donatılmıştır. Ayrıca Python kabuğuna hızlı bir web arayüzü de dahildir, böylece Web2py ile komut satırından etkileşim kurabilirsiniz - uzmanlar için güzel bir ayrıcalık.

Web2py'de kullanılan veri soyutlama sistemi, Django'nun ORM'sinden ve ondan esinlenen diğer ORM'lerden (Peewee gibi) biraz farklı çalışır. Bu sistemler modelleri tanımlamak için Python sınıflarını kullanırken, Web2py define_tablemodelleri başlatmak gibi yapıcı işlevleri kullanır . Farklılıklar, ancak diğer yola alışırsanız sarsıcı olabilir; yeni gelenleri şaşırtmamalılar. Var olan hemen hemen her büyük veritabanıyla konuştuğu için, Web2py'yi bir veri sağlayıcısına bağlamakla ilgili herhangi bir sorun yaşamamanız olası değildir.

Web2py'deki gerçekten kullanışlı bir veritabanı ile ilgili işlev, modellerin birbiriyle nasıl ilişkili olduğunu görselleştirmenize olanak tanıyan modellerin bir diyagramını oluşturma yeteneğidir. Yine de, bu özelliği etkinleştirmek için PyGraphviz kütüphanesini kurmanız gerekecek.

Web2py, jQuery ve AJAX için entegre destek aracılığıyla diğer birçok profesyonel düzeyde bileşen sağlar: uluslararasılaştırma işlevleri, çoklu önbelleğe alma yöntemleri, erişim kontrolü ve yetkilendirme ve hatta ön uç efektleri (örneğin, formlarda bir tarih seçici). Dış ve iç ara yazılım kancaları da dahildir, ancak temel Web2py işlevlerini değiştirmek için ara yazılım kullanmanıza izin verilmiyor. Bununla birlikte, uzun süre çalışan görevlerin üstesinden gelmek için bir zamanlayıcı olmasına rağmen, Web2py'de Python'un zaman uyumsuz işlevselliğinin henüz açık bir kullanımı yoktur. 

Web2py'nin belgelerine "kitap" denmesi şaşırtıcı değil. İlk olarak, Web2py, Python ve her ikisi için kullanılan dağıtım ortamlarında şaşırtıcı miktarda malzemeyi kapsar. İkincisi, oldukça erişilebilir bir anlatım tarzında yazılmıştır. Üçüncüsü, yaygın uygulama oluşturma senaryoları hakkında derinlemesine konuşuyor. Örneğin, AJAX uygulamaları oluşturmak için jQuery'nin kullanılmasıyla ilgili koca bir bölüm var.

Weppy

Weppy, Flask'ın minimal sadeliği ile Django'nun bütünlüğü arasında bir orta nokta gibi hissediyor. Bir Weppy uygulaması geliştirmek Flash'ın basitliğine sahipken, Weppy, veri katmanları ve kimlik doğrulama gibi Django'da bulunan birçok özellikle birlikte gelir. Bu nedenle, Weppy, son derece basitten mütevazı bir şekilde karmaşık olan uygulamalara uygundur.

İlk bakışta Weppy kodu, Flask kodu veya Şişe kodu gibi harika görünüyor. Basit, tek yollu bir web sitesini kurmak ve çalıştırmak için birkaç talimata ihtiyaç vardır. Rotalar, işlev dekoratörleri aracılığıyla (kolay yol) veya programlı olarak tanımlanabilir ve bunu yapmak için sözdizimi Flask / Bottle ile yakından ilgilidir. Şablon oluşturma, sözdizimindeki küçük değişiklikler dışında aynı şekilde çalışır.

Weppy, yalnızca eklenti veya eklenti olarak dahil ettikleri bazı özellikleri ekleyerek bu küçük çerçevelerle tezat oluşturuyor. Örneğin, ne Flask ne de Bottle yerleşik bir ORM'ye veya bir veri yönetim sistemine sahip değildir. Weppy, çok daha popüler olan SQLAlchemy yerine pyDAL projesine dayalı olsa da bir ORM içerir. Weppy, Django'nun ORM'nin bir parçası olarak desteklediği şema geçişlerini bile destekler (Django'nun geçiş sistemi de çok daha otomatiktir). Weppy bir uzantı mekanizmasına sahip olsa da, resmi olarak onaylanmış eklentilerin listesi küçüktür, Flask'ın uzantı kataloğundan çok daha küçüktür.

Weppy gibi daha hafif çerçeveler, genellikle RESTful API'leri oluşturmak için kullanılır ve Weppy, bu amaç için kullanışlı işlevlerle donatılmış olarak gelir. @serviceBir rotaya bir dekoratör koyun ve döndürdüğünüz veriler otomatik olarak JSON veya XML seçiminize göre biçimlendirilir.

Weppy, daha büyük bir çerçeveyle daha uyumlu görünen, ancak toplu olarak uygulanan başka özellikler içerir. Örnekler arasında veri doğrulama mekanizmaları, form işleme, yanıt önbelleğe alma ve kullanıcı doğrulama yer alır. Tüm bu durumlarda, Weppy "yeterli" bir yaklaşım benimsiyor. Sağlanan özellikler, Django ve diğer ağır çerçevelerde bulabileceğiniz kadar eksiksiz değildir, ancak bir geliştiricinin bunları yararlı hale getirmek için çok fazla emek harcamasına gerek yoktur ve her zaman gerçeğin ardından genişletilebilir.

Weppy'de bulunan bir başka ağır çerçeve özelliği, uluslararasılaştırma desteğidir. Şablonlardaki dizeler, basit Python sözlükleri olan uygulama ile birlikte sağlanan yerel dosyalara göre çevrilebilir. Dil seçimi, tarayıcı isteğini (yani, Accept-Language HTTP başlığı) ayrıştırarak veya bir çeviriyi belirli bir yola bağlayarak da ayarlanabilir.

Weppy'nin belgeleri, çerçevenin kendisiyle aynı tada sahiptir. Temiz, okunabilir ve insanlar tarafından tüketilmek üzere yazılmış. Her zamanki "merhaba dünya" örneğinin yanı sıra, başlangıç ​​projesi olarak bir mikroblog sistemi oluşturmanıza olanak tanıyan güzel bir izlenecek yol öğreticisi içerir.

Weppy için uzun vadeli planlar, düşük seviyeli, birinci sınıf varlıklar olarak asenkron ve soketleri desteklemeyi içerir. Weppy'nin geliştiricileri, bu özellikleri 2.0 sürümünde sunmayı ve ardından Weppy'nin gelecekteki tüm sürümleri için Python 3.7 veya daha üstünü gerektirmeyi planlıyor.

Zope