frameworki Pythona można podzielić na kilka obszarów, ponieważ Python jest bardzo zróżnicowanym językiem i może być używany w różnych dziedzinach. Każda z tych dziedzin ma swoje własne ramy, z których niektóre są bardziej popularne niż inne. Jedną z najpopularniejszych dziedzin, w których stosuje się Python, jest tworzenie stron internetowych, na których skupimy się dzisiaj.
prezentowane frameworki można podzielić na trzy kategorie: frameworki z pełnym stosem, które oferują wiele nieszablonowych funkcji po stronie serwera i klienta; microframeworks, które oferują wsparcie po stronie serwera (czasami mogą być rozszerzone na stronę klienta) i pozwalają na tworzenie aplikacji webowych za pomocą jednego pliku Pythona; i wreszcie frameworki asynchroniczne, które obsługują żądania asynchronicznie.
frameworki webowe z pełnym stosem
Django
Django jest jednym z najpopularniejszych frameworków Pythona. Oferuje wiele gotowych funkcji, takich jak panel administracyjny lub ogólne widoki i formularze. Główne cechy Django to:
-
jeden skrypt zarządzający („manage.py”), które mogą być użyte do wykonywania większości działań specyficznych dla frameworka (takich jak uruchamianie serwera programistycznego, tworzenie użytkownika administratora, zbieranie plików statycznych itp.
-
synchroniczne przetwarzanie żądań,
-
schemat architektury MTV (model-template-view) (będący odmianą wzorca model-view-controller),
-
niestandardowe mapowanie obiektowo-relacyjne (ORM) do komunikacji z bazą danych,
-
wykorzystanie funkcji i klas do tworzenia kontekstu widoku i obsługi akcji,
-
Django jest surowe i wymusza własny styl kodowania na programistę – dużo meta programowania,
-
Bardzo dobra, obszerna dokumentacja z przykładami,
-
niestandardowe renderowanie szablonów HTML silnik,
-
niestandardowy system routingu URL,
-
zgodność ze standardem WSGI,
-
obsługa statycznych plików – routing URL oraz wykrywanie i gromadzenie,
-
duża liczba zewnętrznych modułów, np. Django REST Framework, Django CMS, kanały Django (websockety).
Django jest dobrym rozwiązaniem dla większych projektów, gdzie wymagane jest rozbudowane wsparcie backendowe i frontendowe lub w przypadkach, w których czas odgrywa kluczową rolę, ponieważ Django oferuje dużą liczbę gotowych komponentów. Kodowanie w Django polega głównie na dostosowywaniu ogólnych części kodu. Programista musi przestrzegać zestawu reguł, które pochodzą z danego elementu. W przypadku projektów, w których pożądana jest duża elastyczność kodu, Django może nie być najlepszym wyborem.
37.514 gwiazd Github / 183.588 pytań StackOverflow
Web2py
Web2py koncentruje się na bezpieczeństwie, szybkości programowania i łatwości użytkowania. Oferuje wiele funkcji po wyjęciu z pudełka: serwer WWW, bazę danych, panel administracyjny, wiki lub widżety siatki. Główne cechy frameworka to:
-
synchroniczne przetwarzanie żądań,
-
niestandardowa warstwa abstrakcji bazy danych (DAL), która działa jako ORM,
-
wymusza strukturę MVC,
-
funkcje i klasy mogą być używane do tworzenia kontrolerów,
-
ścisła filozofia „powinien być tylko jeden sposób robienia rzeczy”,
-
bogata dokumentacja z wieloma przykładami,
-
Niestandardowy silnik HTML, który pozwala na użycie kodu Pythona w szablonach,
-
Niestandardowy routing – funkcja url generująca wewnętrzne ścieżki dla działań i plików statycznych,
-
obsługa standardu WSGI, ale możliwe jest użycie CGI (Common Gateway Interface), FastCGI, GAE (Google App Engine) lub innych,
-
oferuje statyczne routing plików i strumieniowanie podczas programowania,
-
ma wbudowane usługi REST, ale wymaga RAM Tornado do użycia gniazda internetowego.
Web2py został zainspirowany frameworkami Ruby on Rails i Django i czerpie z nich to, co najlepsze.
może być dobrym wyborem dla programistów, którzy chcą migrować z Ruby lub dla tych, którzy są znudzeni Django, ale szukają innego dużego i bogatego w funkcje frameworka.
oferuje aplikację „admin”, która działa jako internetowe IDE do tworzenia i zarządzania aplikacjami (np. kreacje aplikacji, edytor kodu). Jest również wspierany przez PyCharm.
Ogólnie Rzecz Biorąc, Web2Py nie brakuje żadnych funkcjonalności, które posiada Django. Te dwie ramy mogą być wykorzystane do realizacji tych samych zadań. Web2Py jest młodszy i ma mniejszą społeczność niż Django, więc może być trochę trudniej znaleźć pomoc w razie problemów.
1,665 gwiazd GitHub / 2,004 pytania StackOverflow
TurboGears
TurboGears łączy wiele zewnętrznych usług, aby stworzyć jeden Framework funkcjonalny:
-
synchroniczne przetwarzanie żądań,
-
wzorzec model-view-controller (MVC),
-
wykorzystuje SQLAlchemy ORM,
-
pozwala na wykorzystanie funkcji i generowanie kontekstu widoku klasy,
-
oferuje kilka gotowych do użycia klas generycznych (bardzo ciekawy APIController do tworzenia REST API),
-
dokumentacja jest trochę chaotyczna, ale może to być kwestia przyzwyczajenia się do niej,
-
używa języka szablonów Kajiki,
-
niestandardowe metody routingu/wysyłki url,
-
zgodne z WSGI standardowo,
-
obsługuje statyczne konfiguracje ścieżek plików
-
można rozszerzyć o dodatkowe moduły, np. Circus i Chaussette do obsługi gniazd internetowych.
framework nie jest tak popularny jak jego poprzednicy, ale mimo to warto go sprawdzić.
259 gwiazd GitHub / 107 pytań StackOverflow
Microframeworks
Flask
to jeden z najpopularniejszych microframeworków Pythona, jest niezawodny i szybki. Mówi się, że powstał jako żart. Główne cechy RAM to:
-
synchroniczne wsparcie żądań,
-
nie wymusza żadnej architektury projektu, ale ma pewne zalecenia (pakiet, moduł, plany),
-
nie oferuje ORM, ale można użyć SQLAlchemy lub innego,
-
obsługuje funkcje, jak również niektóre ogólne widoki klas podobne do Django (począwszy od Flask 0.7),
-
luźny styl kodowania, nie wymusza żadnych rozwiązań, większość decyzji pozostawia się do uznania dewelopera,
-
dobra dokumentacja z przykładami,
-
możliwe jest użycie silnika szablonów HTML Jinja2,
-
Werkzeug routing system,
-
zgodny ze standardem WSGI,
-
obsługuje podstawowe statyczne routing plików,
-
może być rozszerzony o dodatkowe moduły innych firm, np. flask-restful do tworzenia API REST lub Flask-socketio do obsługi gniazd internetowych.
Ten framework sprawdzi się w małych i średnich projektach. Ma kilka modułów innych firm, które są gotowe do użycia, a także dobre natywne rozwiązania.
Flask powinien sprawdziÄ ‡ siÄ ™ w zadaniach, w ktĂłrych wymagane sÄ … skomplikowane, niestandardowe funkcje, ale Django wydaje siÄ ™ zbyt duĹźe do tego zadania. Z drugiej strony ustawienie KOLBY POD większy projekt Od początku może być trudne, ponieważ nie ma „oficjalnego” sposobu na to.
39,946 gwiazd Github / 24,512 pytań StackOverflow
Pyramid
Pyramid zaczyna się od minimalnej instalacji, którą można rozszerzyć w razie potrzeby. Warto zauważyć, że jest to część projektu Pylons, który integruje technologie związane z Internetem.
to jedne z najważniejszych cech piramidy:
-
oferuje synchroniczne przetwarzanie żądań,
-
konteksty widoków można definiować za pomocą funkcji i klas,
-
nie ma określonego ORM, ale zaleca się SQLAlchemy,
-
nie wymusza żadnego stylu kodowania ani architektury projektu – TIMTOWTDI,
-
oferuje dobrą dokumentację z samouczkami i przykładami,
-
nie dostarczono konkretnego silnika szablonu HTML, ale zalecany jest Chameleon,
-
ciekawy niestandardowy system routingu pozwala na dopasowanie wielu widoków do jednego adresu url,
-
jest zgodny z WSGI,
-
rozbudowana obsługa plików statycznych-obsługa plików, routing URL dla plików statycznych,
-
może być rozszerzona o zewnętrzne moduły, np. Cornice dla REST API, aiopiramid ze wsparciem asynchronicznym.
Ten framework może być dobrym wyborem w przypadkach, gdy nie chcesz tracić czasu na naukę niestandardowych rozwiązań frameworkowych (takich jak ORM), ale nadal potrzebujesz rozbudowanego narzędzia do tworzenia oprogramowania, ponieważ Pyramid wspiera korzystanie z wielu znanych samodzielnych rozwiązań.
ma dobre możliwości skalowania – reklamuje się jako framework, który może „zaczynać małe i kończyć Duże”.
2,974 pytań na GitHub / 2,060 pytań na StackOverflow
CherryPy
umożliwia tworzenie aplikacji webowych w taki sam sposób, jak obiektowy projekt Pythona. Nie posiada pełnowartościowych funkcjonalności i nie wymusza żadnych konkretnych rozwiązań-deweloper może zdecydować, jak rozwiązać problemy pojawiające się podczas rozwoju. Cechy CherryPy to:
-
oferuje synchroniczną obsługę żądań,
-
nie wymusza żadnej struktury lub architektury projektu,
-
nie dostarcza żadnego ORM, ale można użyć SQLAlchemy lub sqlobject,
-
nie dostarcza żadnego silnika szablonów HTML,
-
ma luźny styl kodowania,
-
oferuje przyzwoitą dokumentację,
-
może być używany system routingu routes (Python wersja rails Routing System),
-
jest zgodny z WSGI,
-
ma dobrą obsługę plików statycznych – pozwala na serwowanie plików lub całych plików katalogi,
-
umożliwia tworzenie REST API tylko z wbudowanymi narzędziami,
-
ułatwia korzystanie z gniazd internetowych za pośrednictwem modułu ws4py.
główną zaletą CherryPy jest to, że jest wyposażony w gotowy do produkcji serwer WSGI, który eliminuje konieczność konfiguracji zewnętrznego serwera podczas wdrażania.
główną wadą tego frameworka jest to, że nie jest zbyt popularny, dlatego ma mniejszą liczbę zewnętrznych modułów i mniej żywą społeczność.
829 GitHub stars/ 1,244 StackOverflow questions
BottlePy
to kolejna mikroframeworka, która reklamuje się jako szybka i prosta. Warto zauważyć, że BottlePy jest dostarczany jako pojedynczy moduł bez dodatkowych zależności. Funkcje:
-
implementuje synchroniczną obsługę żądań,
-
oferuje Niestandardowy silnik HTML, ale można użyć innych silników, takich jak Mako, Jinja2 lub Cheetah,
-
nie dostarcza ORM, ale można użyć zewnętrznych rozwiązań, np. SQLAlchemy lub Macaron,
-
nie wymusza żadnej architektury projektu,
-
oferuje wystarczającą dokumentację,
-
ma niestandardowy system routingu, ale można użyć systemu routingu Werkzeug (poprzez bottle-werkzeug),
-
implementuje standard WSGI,
-
oferuje podstawowy statyczny routing plików,
-
oferuje greenlety (z gevent) jako asynchroniczne rozwiązanie do obsługi żądań,
-
możliwe jest tworzenie REST API bez zewnętrznych modułów – obsługuje dane klienta JSON.
ze względu na mały rozmiar (tylko jeden plik) i brak zewnętrznych zależności (tylko standardowa biblioteka Pythona) może być dobrym wyborem dla początkujących, którzy chcą rozpocząć naukę tworzenia stron internetowych.
może się też przydać przy bardzo małych miejscach lub jednorazowych testach. BottlePy nie będzie najlepszym wyborem dla średnich lub większych projektów, ponieważ wymagałoby to trochę pracy, aby dotrzeć do punktu, w którym zaczynają się cięższe frameworki.
5,795 gwiazd GitHub / 1,288 pytań StackOverflow
asynchroniczne frameworki
Aiohttp
jest to rozbudowany framework Pythona asynchronicznego. Oferuje serwer z oprogramowaniem pośredniczącym, sygnałami, płynnymi zamknięciami i wieloma innymi:
-
asynchroniczna obsługa żądań, websockety klientów i serwerów,
-
możliwe jest użycie Gino async ORM,
-
obsługuje widoki funkcji i klas,
-
wystarczająca dokumentacja, ale trochę trudna w nawigacji,
-
możliwe jest użycie czystej SQLAlchemy, ale Gino jako wrapper asynchroniczny jest zalecany,
-
obsługuje sterowniki asynchroniczne postgres, MySQL, Redis,
-
nie ma gotowego silnika szablonów, ale można zastosować Jinja2 lub Mako,
-
niestandardowy system routingu,
-
brak obsługi WSGI,
-
obsługuje routing dla plików statycznych,
-
wiele modułów innych firm, które mogą dalej rozszerzać framework, np. aiohttp-apispec do tworzenia API REST, aiohttp-security do uwierzytelniania i uprawnień użytkowników.
ponieważ oferuje wiele funkcji od razu po uruchomieniu (np. wsparcie dla stron klienta i serwera, websockets, middleware, sygnały), Aiohttp może być używany w średnich projektach (lub nawet większych).
6,378 gwiazd Github / 503 pytania StackOverflow
Sanic
Sanic to bardzo podobny do flask framework: jest mały, liberalny i pozostawia dużo miejsca dla programisty. Jego główną cechą jest szybkość.
oto kilka innych cech:
-
obsługa obsługi żądań asynchronicznych,
-
nie oferuje żadnych interfejsów bazy danych, ale można zainstalować Gino async ORM,
-
oferuje funkcję i klasę jako źródło kontekstu widoku,
-
styl kodowania jest dość luźny, bardzo podobny do Flask,
-
dokumentacja dostarczona z „readthedocs”,
-
można użyć silnika szablonu HTML Jinja2,
-
niestandardowy system routingu,
-
nie jest domyślnie zgodny ze standardem WSGI, ale można zainstalować moduł innej firmy (sanic-Dispatcher), aby go obsługiwać,
-
ma podstawowe statyczny routing plików,
-
może być rozszerzony o dodatkowe moduły, np. Sanic CRUD do tworzenia REST API.
wybór Sanic powinien być dobrą decyzją, gdy masz już doświadczenie z Flask, ponieważ te dwa frameworki mają wiele wspólnego.
Sanic oferuje domyślną obsługę konfiguracji, podczas gdy we wspomnianym wcześniej aiohttp użytkownik musi to zrobić samodzielnie. Ma kilka ciekawych modułów innych firm, takich jak ogranicznik szybkości żądań lub integracja GraphQL.
10,625 gwiazd Github / 58 pytań StackOverflow
Tornado
Tornado jest frameworkiem sieciowym Pythona i biblioteką sieci asynchronicznych, pierwotnie opracowaną w FriendFeed (witrynie skupiającej społeczności). Dzięki temu oferuje wbudowaną integrację z serwisami społecznościowymi takimi jak Google, Facebook i Twitter.
możliwa jest również integracja z innymi frameworkami i bibliotekami: Twisted, asyncio czy nawet aplikacjami WSGI. Cechy Tornado:
-
oferuje wiele klas generycznych, które można wykorzystać do tworzenia aplikacji, np. Router lub SocketHandler dla websocketów,
-
Niestandardowy silnik szablonu HTML,
-
przejrzysta i czytelna dokumentacja,
-
funkcje i klasy mogą być używane do definiowania akcji i obsługi żądań,
-
niestandardowa obsługa routingu-oferuje ogólne klasy, które mogą być używane do tworzenia tras,
-
obsługuje WSGI, ale nie jest to zalecane-Użytkownik powinien zamiast tego używać własnych interfejsów,
-
Out – of – the-box WebSockets support, authentication (np. poprzez Google) i funkcje bezpieczeństwa (takie jak podpisywanie plików cookie lub Ochrona XSRF),
-
do tworzenia API REST nie są potrzebne żadne dodatkowe narzędzia.
framework powinien działać dobrze w przypadkach, gdy istnieje wiele połączeń przychodzących, które mogą być obsługiwane szybko lub w rozwiązaniach czasu rzeczywistego, np. czaty.
Tornado próbuje rozwiązać problem c10k, więc wysoka prędkość przetwarzania jest priorytetem.
Kolejną zaletą tornada jest jego rodzime wsparcie dla służb społecznych. Ten framework nie będzie dobrym wyborem do tworzenia standardowych witryn CRUD lub dużych aplikacji biznesowych, ponieważ nie został zaprojektowany do tego celu. W przypadku większych projektów może być zintegrowany z aplikacjami WSGI jako część ich większej struktury i zajmować się zadaniami, które wymagają dużych prędkości obsługi.
16,768 gwiazd Github / 3,263 pytania StackOverflow
podsumowanie
frameworki internetowe przedstawione powyżej są jedynie niewielką częścią większej i szerszej rodziny frameworków Pythona.
każde rozwiązanie ma swoje mocne i słabe strony i, jak w przypadku wszystkiego innego, nie ma idealnego dopasowania, które rozwiąże każde zadanie.
najważniejsze pytania, na które trzeba odpowiedzieć wybierając framework są podyktowane problemami, które trzeba rozwiązać.
- Jeśli wymagane jest szerokie wsparcie po stronie serwera i przeglądarki, dobrym wyborem może być Framework z pełnym stosem.
- w przypadku mniejszych projektów lub gdy elastyczność w pisaniu kodu jest priorytetem, mikroframework może być drogą do zrobienia.
- w przypadkach, gdy szybkość przetwarzania żądań odgrywa ważną rolę lub projekt będzie musiał radzić sobie z długim czasem reakcji, asynchroniczny framework powinien załatwić sprawę.