Kilka zalet Django

...albo też 5 problemów, przed którymi Django może Cię uchronić

Wybór frameworka, w którym będziemy tworzyć nasz Wielki Serwis Internetowy bywa kłopotliwy... Szczególnie, że osoba, która ma pomysł na Drugą Naszą Klasę niekoniecznie musi akurat znać się na programowaniu dla Internetu. Niestety, najczęściej to na niej spoczywa ta decyzja: od tego zależy, jakich programistów będzie starała się zatrudnić, gdzie ich będzie szukać i tak dalej... Moim zdaniem, dla znakomitej większości projektów internetowych prawidłową odpowiedzią na pytanie o framework jest Django, napisane w języku Python. Zamiast jednak zachwalać jego zalety, podejdę do sprawy negatywnie: postaram się pokazać, jakich problemów można dzięki użyciu Django uniknąć. Celowo staram się unikać technikaliów — to nie programiści są głównymi adresatami tego wpisu.

Maskotka Django

Znowu musimy napisać panel administracyjny

Każdy serwis internetowy potrzebuje panelu administracyjnego. Niezależnie od tego, czy chcemy sprzedawać staniki w Internecie, rekomendować książki czy tworzyć społecznośc przyjaciół, przecież musimy jakoś wprowadzić staniki do bazy danych, zlikwidować powtarzające się tytuły czy zbanować użytkowników, którzy zamiast przykładnie się uspołeczniać będą trollować i wyzywać od warzyw. Funkcjonalności potrzebne w panelach różnych serwisów są na tyle podobne, aby nudzić i frustrować programistów, a na tyle różne, że zazwyczaj nie da się po prostu przekopiować panelu z poprzedniego serwisu.

Tam gdzie wdaje się rutyna, zaraz wkradają się błędy — a nie potrzeba wiele wyobraźni aby zdać sobie sprawę, jak bardzo namieszać mogą błędy w panelu administracyjnym. Błędnie wprowadzonych towarów nie da się sprzedać, a banując towarzyskiego Krzysia zamiast wrednie trollującego Jakuba nie poprawisz nastroju swoim użytkownikom.

W Django nie trzeba pisać panelu administracyjnego: on już tam jest. Jest szybki, śliczny i działa: Django tworzy go na podstawie zdefiniowanych obiektów. Co najważniejsze, nie przypomina on w działaniu czarnej skrzynki. Stosunkowo łatwo jest dopisać do niego funkcjonalność która jest nam akurat potrzebna.

Mój dizajner pokłócił się z programistą

Dizajnerzy bardzo rzadko są programistami, a programiści... no cóż, rzadko robią ładne strony internetowe.

Niestety, sporo frameworków wydaje się stworzonych z myślą o tym, aby wywołać jak większe tarcia między tymi dwiema grupami zawodowymi. Uzyskanie odpowiednich efektów odnośnie do prezentacji również wymaga programowania, co często prowadzi do jednej z dwóch patologicznych sytuacji:

  • Dizajner, działając w jak najlepszej wierze, wprowadza do aplikacji błędy, a ich odnalezienie i naprawa spada na programistę (który rzadko jest z tego powodu szczęśliwy).
  • Programista dostaje od dizajnera rysunek tego, jak ma wyglądać strona i jest sam odpowiedzialny za przełożenie wizji artystycznej na kod HTML. Skutki tego bywają żałosne. Napisanie poprawnego HTML-a i CSS-a który będzie dobrze wyglądał we wszystkich wiodących przeglądarkach jest trudne i niekoniecznie jest to umiejętność idąca w parze z pisaniem wydajnych zapytań SQL.

Django radzi sobie z tym niebezpieczeństwem w bardzo dobrym stylu dzięki swojemu językowi template'ów. Jest to bardzo uproszczony język programowania zaprojektowany specjalnie z myślą o tworzeniu interfejsu webaplikacji. Pozwala on wyrazić większość konstrukcji potrzebnych dizajnerowi (pętle, warunki, itp.), ale dzięki swojej prostocie nie daje wiele okazji popełnienia błędów. Co więcej, od razu wiadomo, czy błąd jest w szablonie, czy w głównym programie, co bardzo upraszcza proces jego naprawy.

Nie wiem, jak to działa, nie mam dokumentacji!

Stary dowcip mówi, że dokumentacja jest jak... pizza. Kiedy jest dobra, jest naprawdę bardzo dobra. Kiedy jest taka sobie, to i tak jest lepsza niż żadna. Dokumentacja Django bez wątpienia należy do tej pierwszej kategorii. Można wręcz powiedzieć, że Django słynie w świecie Open Source ze swojej doskonałej dokumentacji. I nie chodzi tu tylko o pieczołowite opisanie poszczególnych modułów, klas i metod, ale również o tutoriale pozwalające dość szybko ogarnąć o co w tym całym Django chodzi. Co więcej, w Internecie możemy zupełnie za darmo poczytać sobie książkę o Django, która systematycznie i bez bólu pozwoli szybko tworzyć pierwsze projekty w Django, nawet jeśli stawiamy dopiero pierwsze kroki w Pythonie.

Trafiliśmy na wykop i nasza strona dostała zadyszki

Są takie frameworki internetowe, które są bardzo nowatorskie i eleganckie. Programistom świetnie się w nich pisze, kod praktycznie sam się generuje, a błędy są tak zawstydzone swoją obecnością, że z rozpaczy popełniają seppuku. Niestety, aplikacja, która świetnie działała z komputera dewelopera w trakcie prezentacji, po wpuszczeniu na nią użytkowników nagle zaczyna dostawać zadyszki... Krztusić się... Nie daj Boże link na Wykopie albo Digga... Diagnoza: źle się skaluje. Niedobrze. A miało być tak pięknie...

Na szczęście, z Django taka sytuacja jest dużo mniej prawdopodobna. Django nie powstało na zasadzie „zróbmy sobie nowy, fajny webframework dla Pythona!”. Ono zostało wyekstrahowane z rzeczywiście działającej aplikacji obsługującej portale newsowe. Kilka przykładów serwisów używających Django lub jego płatnego krewniaka, Ellingtona:

W Polsce:

No i oczywiście Gryziemy.net i Balkonetka;-)

Okazało się, że w pudełku nie było baterii!

Pony Magic

Nie wiem, czy przeżyliście jako dzieci podobną sytuację: jest tuż po Wigilii, wreszcie można obejrzeć prezenty. Niecierpliwie rozdzieracie opakowanie, i... Tak! zdalnie sterowany samochodzik o którym marzyliście przez ostatnich kilka miesięcy! Hurra! Ale... Hola... W opakowaniu nie ma baterii... A sklepy otwierają dopiero po Świętach... Czarna rozpacz.

Twórcy Django włożyli dużo wysiłku aby swoich użytkowników przed takimi sytuacjami uchronić. By pociągnąć dalej metaforę, w pudełku od Django znajdziemy nie tylko baterie. Znajdziemy jeszcze zapasową karoserię, drugą kontrolkę do zdalnego sterowania, przyczepę kempingową i kompas:

  • Wspomniany już wyżej panel administracyjny
  • Obsługa użytkowników (logowanie, wylogowywanie, pozwolenia, itp.).
  • Internacjonalizacja
  • Komentarze
  • Cache
  • Wysyłanie e-maili
  • Mapy i zastosowania geograficzne (od wersji 1.0 GeoDjango wchodzi w skład głównej dystrybucji).
  • RSS/Atom
  • Lista akcesoriów ;-)

Prócz tego, w Internecie znajdziemy mnóstwo gotowych aplikacji do Django, m.in. do tagowania, wysyłania newsletterów, rejestracji użytkowników...

Interesujące linki

Obrazki pochodzą ze stron hackety.org i avalonstar.com.
  • japhy
    japhy18-01-09, 01:22

    Ciekawostką jest też ponoć działająca możliwość deploymentu Django w korpośrodowiskach w formie javowego .war, wrzucanego (bez konieczności instalacji żadnych zależności) do serwera aplikacji typu Tomcat czy inszy Jetty. Co prawda wymaga Jythona 2.5beta (przed wiosną powinien być oficjalny 2.5) i wyciągnięcia łaty z http://code.google.com/p/django-jython/, ale sama możliwość jest ciekawa i jeśli dojrzeje, może być furtką dla Pythona do korpoświata. Szczegóły: http://wiki.python.org/jython/DjangoO...

    Swoją drogą, czy grono na pewno jest takim dobrym przykładem, że django nie krztusi się pod obciążeniem? ;) No i gronowcy na django raczej narzekają, że za mało elastyczny na ich potrzeby, itd; mam wrażenie, że Django może być fajne do prototypowania, a poważne 2.0 (albo i 1.0 bez gwiazdki z napisem „BETA”) może być warto przekuć w czymś bardziej elastycznym.

  • Ryszard Szopa
    Ryszard Szopa18-01-09, 01:51

    Co do grona, to nie widziałem nigdy ich kodu i nie wiem, jakie mieli problemy, więc nie mogę się autorytatywnie wypowiadać, ale z tego co wiem ORM djangowy całkiem dobrze reaguje na kawałki gołego SQL-a tu i ówdzie. Co więcej, Django samo w sobie nie sprawia kłopotów przy wysyłaniu zapytań bezpośrednio do bazy danych, z całkowitym pominięciem ORM-u. W związku z tym podejrzewam, że problemy Grona mogą nie być bezpośrednio spowodowane przez użycie Django.

  • Dominik Szopa
    Dominik Szopa18-01-09, 02:13

    Naprawdę super artykuł, na pewno się przyda. Do interesujących linków dopisał bym jeszcze django.pl oraz grupę dyskusyjną django-pl http://groups.google.pl/group/django-pl

    Co do django w polsce to więcej ciekawych serwisów znajdziesz tutaj: http://djangopl.uservoice.com/pages/p...

    Masz rss'a z kategorii django na blogu? to pozwolę sobie dopisać Ciebie do listy autorów na django.pl/community/ Jeżeli nie masz nic przeciwko? Jest tam dostępny kanał rss ludzi piszących o django po polsku.

    Pozdrawiam
    Dominik Szopa
    ps. nie wiedziałem że jest jeszcze jakiś ewangelista django o nazwisku Szopa tak jak ja :)

  • japhy
    japhy18-01-09, 02:22

    Wydajność to jedno, marudzili raczej na brak elastyczności, gdy mieli coś nietrywialnego do zaimplementowania. To tak dla podkręcenia jasności wypowiedzi.

  • Dominik Szopa
    Dominik Szopa18-01-09, 02:28

    japhy: to tylko przez to że używali lub używają archaicznej wersji django w której jeszcze nie było wielu rzeczy które są dzisiaj w django.

  • ag.
    ag.18-01-09, 09:05

    podoba mi się tu.

  • Dominik Szopa
    Dominik Szopa18-01-09, 13:15

    Tutaj: http://justinlilly.com/blog/2009/jan/... można znaleźć ciekawą prezentacje która również może być pomocna przy lobowaniu w firmie za django.

  • butters77
    butters7720-01-09, 13:10

    Mała uwaga korektorska:

    * postaram się pokazać, jakie problemy można dzięki użyciu Django uniknąć. ("jakich problemów";)

    Poza tym - bardzo ciekawa notka!:)

  • Ryszard Szopa
    Ryszard Szopa20-01-09, 16:04

    @butters77: Wielkie dzięki za zwrócenie uwagi! Już poprawiłem. :)

  • mariska
    mariska22-01-09, 12:46

    Przyznam, że zaciekawiło mnie to Django i naszła mnie ochota żeby je wypróbować. Podoba mi się zwłaszcza koncepcja widoków i szablonów, wydaje się być dużo bardziej intuicyjna niż w CMSach bazujących na pehapie. Tak się tylko składa, że do tej pory nie miałam żadnej styczności z Pythonem i kod w tym języku wygląda dla mnie nieco magicznie ;) Jakie skille trzeba posiąść, żeby postawić na Django cokolwiek co ma ręce i nogi? ;) I jeszcze - czy istnieją gdzieś w sieci jakieś opensourcowe moduły i dodatki do systemu, łatwe do zainstalowania i użytkowania przez zwykłego śmiertelnika?

    Hmmm... uprzejmie proszę o nieodpowiadanie w najbliższym tygodniu, i tak jestem na dobrej drodze do zawalenia semestru, a jak jeszcze zacznę dłubać w Pythonie zamiast pisać projekty zaliczeniowe... ;)

  • Ryszard Szopa
    Ryszard Szopa22-01-09, 16:31

    Tak jak pisałem: Django open-source'owymi dodatkami stoi. Nie ma ich zapewne aż tyle co do PHP, ale nie ma co się dziwić: w końcu PHP to jest cały język programowania, a Django tylko frejmłork :-)

    Co do PHP i samego Pythona, to różnica jest, żeby użyć metafory rodem z LB, jak między starym, białym, rozciągniętym Triumphem 80C i Freyą Arabellą 65G, na korzyść Pythona. Jeśli ktoś już raz spróbuje, to bardzo rzadko ma ochotę na powrót do PHP.

    Wielką zaletą Pythona jest to, że składnia wygląda jak konsekwentnie pisany pseudokod, więc praktycznie od razu można zacząć czytać kod innych ludzi. Aby zacząć samemu coś pisać powinno wystarczyć dokładne przeczytanie tutoriala na stronie Pythona (http://docs.python.org/tutorial/) i przejrzenie dokumentacji biblioteki standardowej. Kiedy się wchłonie te informacje można już spokojnie zabierać się za czytanie książki o Django :-)

  • chester
    chester24-03-09, 09:32

    Witam. Na początek pochwalę wpis, przyjemny i łatwo przyswajalny, nawet dla tych mniej obeznanych w programowaniu :)

    @mariska: odnośnie przyswajania pythona to uwierz, że prościej nie można :) w święta Bożego Narodzenia przeczytałem kilka pierwszych rozdziałów "Zanurkuj w pythonie" (gdzieś na wikibooks jest) aby załapać podstawy jego typów danych i składni, a później od razu zabrałem się za tutoriale na djangoproject. Teraz kończę pierwszy wcale nie taki mały projekt pisany początkowo w php/symfony.
    Choć oczywiście jeszcze długa droga przede mną, możliwości django są ogromne, więc mam jeszcze dużo pracy, choćby ze zrozumieniem działania keszowania etc..

  • e-doc
    e-doc 19-06-09, 22:21

    Cześć.
    Co do Django.
    W necie pełno jest pyskówek apropos frameworków, wiele niedomówień.
    Jeżeli NAPRAWDE pisałe(a)ś duże aplikacje w PHP, to użyj w sobotę wieczorem Django, ot tak. W poniedziałek zmienisz nadruk na koszulce I'love Django.

  • Zuluseq
    Zuluseq03-07-09, 12:31

    Spróbowałem.. i nadal nie widzę na czym ma polegać wyższość django nad dp. Zend Frameworkiem.

    Wciąż słyszę jak to python bije na łeb php - ale konkretnego argumentu jeszcze nie zarejestrowałem.
    To jak spór Makintoszowców z Pecetowcami albo Linuxowców z Windows.
    Tyle że znam linuxa lepiej niż windows, a jednak pracuję w Windows, bo linux nie ma wiele do zaoferowania.

    Boje się, że w dyskusji Python kontra PHP jest podobnie.

    Jestem skłonny przesiąść się na Pythona - ale niech mi ktoś wreszcie powie - w czym lepszy (konkretnie)
    Python o PHP
    django od ZF

  • ms
    ms 06-07-09, 16:29

    Oba te języki są Turing-complete. PHP już nie robi takich numerów jak 9 lat temu, że zaczyna się krzaczyć przy skryptach dłuższych niż 500 linii. PHP nie wspiera wątków, ale maszyna Turinga też nie, więc ok.

    A skoro tak, to można w nich napisać cokolwiek, w szczególności cokolwiek czego brakuje w jednej technologii, dopisać w drugiej. Nawet napisać własny generator kodu, żeby uniknąć syfów i boiler-plate kodu.

    A skoro tak, to nie znajdziesz w publicznym internecie jakiegoś jednego konkretnego argumentu przemawiającego za którąś z tych technologii.

    Może uda ci się trafić na staranne analizy uwzględniające wiele kryteriów, które pomogą ci podejmować decyzję, lub zdać się na osąd innych ludzi.

  • o.
    o. 02-11-09, 20:15

    tworze 3 portal w oparciu o django i in plus moge powiedziec 2 rzeczy - konsola bledow i mikroskopijna ilosc kodu wymaganego przez aplikacje.

  • Maciek
    Maciek22-03-10, 23:23

    Bardzo fajny tekst. Sporo pisałem w PHP jakiś czas temu zacząłem pisać w Pythonie, jest dużo przyjemniejszy i dużo wygodniej się w nim piszę. Django też niczego sobie :)

Skomentuj!