Od niedawna, ale intensywnie, programuję strony z użyciem Django. Jego nauka przebiegała w dziwny sposób - kiedyś czytałem tutoriala, zacząłem nawet jakiś projekt, ale szybko go porzuciłem, bo technologia wydawała mi się bardzo dziwna - przyzwyczajony do wzorca MVC, nie rozumiałem MTV. Chciałbym po tych kilkudziesięciu godzinach spędzonych z Django stwierdzić, że myliłem się - że to wspaniałe narzędzie, że jednak warto się go nauczyć. I mogę tak powiedzieć, ale... z wieloma ale.
Podstawowym problemem wcale nie jest to, że standardowe widoki w Django noszą nazwę szablonów, kontrolery to widoki, a modele to... modele. Podstawowym problemem jest chyba to, że twórcy za wszelką cenę stawiali na to, by ich rozwiązania były DRY. I rzeczywiście, pisząc miliony obejść człowiek nie się nie powtarza. Okazuje się bowiem, że standardowe narzędzia takie jak panel administratora i autoryzacja są bardzo słabo przystosowane do rozszerzania ich funkcji. Niech ktoś na ten przykład spróbuje dodać do pasku przycisków w panelu administratora dodatkowy przycisk, ale tylko dla jednego konkretnego modelu.
Okej, trochę oszukałem. Podstawowym problemem nie jest stosowanie się do DRY, a jego naginanie - to jest DRY, ale tylko przy konkretnych zastosowaniach, bardzo wąsko zdefiniowanych. Bo jak wytłumaczyć istnienie ciężko rozszerzalnych modeli - jeśli chcę dodać jakieś pole do modelu, to po dodaniu pola do klasy muszę usunąć tabelkę z bazy danych, a potem znów wczytać dane o modelu - jawny brak migracji. Oczywiście wszystko można, ale z poziomu shella bazy danych - wystarczy ALTER TABLE - ale czy tego nie powinien zapewniać "The Web framework for perfectionists with deadlines"? Web jest zbyt dynamiczny, by nie wprowadzać w narzędzia webowe możliwości łatwego rozszerzania.
Starczy jednak tego narzekania, zachwycić się frameworkiem też można. Wspaniałym pomysłem są templatetags oraz filtry - generalnie system templatów jest bardzo intuicyjny i czysty. Moim podstawowym problemem było to, jak udostępniać dynamicznie generowaną treść na wszystkie podstrony - znalazłem artykuł u Jarosława Zabiełły, którego pomysły wydawały mi się dobre. Okazuje się jednak, że w rzeczywistości rozwiązanie to trochę psuje - między innymi czyści kontekst generowany automatycznie przez Django, na dodatek wymaga zmian w konfiguracji, co w aplikacjach produkcyjnych wymaga dość brużdżącego deployu. Odszedłem zatem od tej koncepcji na rzecz templatetagów, będących niby "armatą na muchę".
Co jeszcze zachwyca? Sam Python już byłby wystarczającą odpowiedzią, szczególnie jeśli kogoś podniecają jego funkcyjne zachowania. Zachwyca niedoskonały system modeli i ORM. Bądź co bądź znacznie przyspiesza produkcję stron www i... jest dla mnie przyjemniejszy od coraz bardziej zaciemniającego się Ruby on Rails.