Django oczami programisty PHP

advertisement
Django oczami programisty PHP
Mateusz Kupczyk1
1
Wydział Inżynierii Mechanicznej i Informatyki
Kierunek informatyka, Rok II
[email protected]
Streszczenie
Praca przybliża cechy aplikacji o nazwie „Django”, która jest używana przy
tworzeniu aplikacji internetowych. Dzięki zapewnieniu podstawowych
funkcjonalności wykorzystywanych w większości tego typu aplikacji, Django
skraca czas realizacji projektu, natomiast specyfika języka Python zwiększa
czytelność i wydajność kodu w stosunku do popularnych języków (m.in. PHP).
1 Dlaczego nie PHP?
PHP [1] to obecnie najpopularniejszy język tworzenia aplikacji internetowych, który
jest używany w ponad 75% stron internetowych [2]. Jest to język interpretowany,
jednak za pomocą odpowiednich rozszerzeń możliwe jest zachowanie w pamięci
skompilowanej wersji kodu źródłowego. Ze względu na swoje rozpowszechnienie
cieszy się on ogromnym wsparciem, jest ciągle rozwijany, a liczba bibliotek stale
wzrasta. Na popularności ciągle zyskują frameworki webowe (biblioteki
implementujące szereg funkcjonalności stanowiących podstawę działania aplikacji,
takich jak obsługa połączenia z bazą danych, sesji, mapowanie adresów URL, itp.), a
także gotowe systemy CMS (Wordpress, Joomla, Drupal, Symphony). Dlaczego więc z
tego rezygnować?
Przyglądając się zmianom, jakie zaszły w PHP od wersji 3, nie da się zaprzeczyć, że
jest ich sporo. Ciężko ukryć fakt, że zmiany te wynikały z „potrzeby”, a nawet idąc
trochę dalej – powinny być wprowadzone jeśli nie od początku, to przynajmniej w
momencie, gdy język ten zyskał na popularności. Obserwując na bieżąco aktualizacje
trudno nie odnieść wrażenia, że pewne funkcjonalności były wprowadzane na siłę.
Dlatego też dopiero PHP w wersji 5 obsługuje obiektowość, choć trochę podobną do
tego, jak powinna ona wyglądać, w wersji 5.3 dodano przestrzenie nazw (których
standardowa biblioteka PHP nie używa i przechowuje wszystkie funkcje w zasięgu
globalnym), etc. Ze względu na wsteczną kompatybilność, wraz z wprowadzeniem
(standardowych dla innych języków wysokiego poziomu) rozwiązań, programista może
tworzyć tworzyć oprogramowanie w języku PHP nie wykorzystując nowych rozwiązań.
1
Niestety, przez to jakość kodu „produkowanego” przez wielu programistów jest co
najmniej wątpliwa. Problem pojawia się wtedy, kiedy klient chce zmodyfikować swoją
stronę internetową lub wykorzystać jej kod w innej aplikacji. Z punktu widzenia
doświadczonego programisty, zazwyczaj lepszym rozwiązaniem jest przepisanie
takiego kodu od nowa (za który przecież już ktoś zapłacił), bo jego utrzymanie w takiej
postaci byłoby za drogie, o ile ktoś w ogóle by się tego podjął.
2 Czym jest Django?
Cytując opis ze strony głównej projektu: „Django to webowy framework wysokiego
poziomu napisany w Pythonie z myślą o szybkim rozwoju aplikacji, posiadający
przejrzystą i pragmatyczną architekturę” [3].
Projekt został rozpoczęty w 2004 przez kilku programistów zatrudnionych w
gazecie redagowanej w Kansas, Lawrence Journal-World. Jak sami wspominają, z
uwagi na dziennikarski charakter branży, terminy, których musieli przestrzegać,
zazwyczaj sięgały kilku godzin, a większość zadań musiała być zrobiona „na wczoraj”.
Dlatego też postanowili oni stworzyć narzędzie, dzięki któremu będą mogli pracować
szybciej i wygodniej. Tak zrodził się pomysł napisania szkieletu aplikacji, który
zapewniałby podstawową funkcjonalność w każdym projekcie. Główną zasadą Django
jest oparcie działania na mniejszych modułach (nazywanych aplikacjami, ang. apps)
oraz tworzenie ich w taki sposób, aby mogły być one użyte w kolejnych projektach.
Tak jak pozostałe frameworki, Django zapewnia obsługę połączenia z bazą danych
(wraz z mechanizmem ORM), umożliwia definiowanie własnych adresów URL, a
wszystko w oparciu o subtelną odmianę wzorca MVC (ang. model-view-controller).
Funkcjonalnością, która wyróżnia Django na tle różnych aplikacji tego typu, jest
automatyczne generowanie panelu administracyjnego strony. Mając zaprojektowane
modele strony, za pomocą kilku linii kodu można wygenerować kompletny system
zarządzania treścią (umożliwiający dodawanie, usuwanie i edycję poszczególnych
obiektów), razem z panelem logowania oraz systemem użytkowników i uprawnień. Co
więcej, system poprawnie obsługuje różne typy relacji między obiektami, pozwala na
wyszukiwanie, filtrowanie i pełne dopasowanie panelu do potrzeb użytkownika.
Wszystkie te funkcjonalności pozwalają znacznie skrócić czas pracy nad projektem oraz
umożliwiają programiście skupienie się na wyglądzie i działaniu produktu zamiast na
kwestiach implementacyjnych.
Django, jako framework, nie jest rewolucyjny (istnieją szkielety przeznaczone do
używania wraz z językiem PHP), jednak pewne jego cechy znacznie zwiększają wygodę
tworzenia kodu oraz zmniejszają czas przeznaczony na wykonanie zadania.
3 Podstawowe cechy Django
3.1. Python
Django zostało w całości napisane w Pythonie. Pierwszym, znacznym
usprawnieniem względem języka PHP jest fakt, iż Python to język kompilowany do
byte-code’u, co przekłada się bezpośrednio na wydajność napisanych aplikacji.
Rysunek 1 przedstawia wyniki testu wydajnościowego różnych frameworków
2
webowych pod zasymulowanym obciążeniem kilkudziesięciu użytkowników
jednocześnie przeglądających stronę internetową. Jak widać na poniższym wykresie,
pod bardzo dużym obciążeniem frameworki używające języka PHP (CodeIgniter oraz
Symfony) ustępują wydajnością Django.
Rys. 1. Porównanie wydajności kilku frameworków webowych (źródło: [4]).
Wykres przedstawia zsumowany czas odpowiedzi aplikacji na wszystkie zapytania.
Osoby, które wcześniej miały styczność tylko z językami podobnymi do C/C++
(Java, PHP), na pewno zauważą sporo różnic, przede wszystkim w składni. Python nie
używa nawiasów klamrowych, a zamiast nich wykorzystuje wcięcia. W Pythonie
wszystko jest traktowane jako obiekt. Przykładowy kod funkcji obliczającej silnię w
PHP i Pythonie przedstawia rys. 2.
Rys. 2. Porównanie kodu źródłowego PHP i Python.
Różnice te, choć na początku mogą być męczące (głównie ze względu na
poprzednie przyzwyczajenia), znacząco poprawiają jakość kodu. Składnia w pewien
sposób wymusza stosowanie jednolitego stylu programowania, dzięki czemu kod staje
się czytelniejszy, przez co łatwiej jest nim zarządzać i wprowadzać w nim zmiany po
dłuższym czasie. O tym jak wielką wagę twórcy Pythona przykładają do jakości
3
tworzonego kodu jest fakt sformułowania przez nich filozofii tego języka –
tzw. „Zen of Python” (angielska wersja jest dostępna na oficjalnej stronie [5]).
Na uwagę zasługuje również obszerna, spójna biblioteka standardowa Pythona.
Całość jest pogrupowana w oddzielne moduły, w przeciwieństwie do ogromnej ilości
funkcji dostępnych w zasięgu globalnym kodu PHP, których podział w większości
ogranicza się do nadania ich nazwom różnych przedrostków.
Dokumentacja Pythona jest szczegółowa, choć niekiedy znalezienie informacji,
która nas interesuje, mogłoby trwać trochę krócej. Korzystając z wyszukiwarki Google
oraz ograniczając wyniki tylko do oficjalnej dokumentacji, w niektórych przypadkach
natrafimy na podstronę, która zawiera między innymi informację, której szukamy,
jednak odnalezienie jej pośród wielu opisów może zająć nieco więcej czasu.
3.2. Model-View-Template (MVT)
Django wykorzystuje wzorzec projektowy MVT (model-widok-szablon). Zakłada
on podział aplikacji na 3 podstawowe części:
• Model – reprezentuje logikę aplikacji.
• Szablon (template) – określa, w jakiś sposób dane mają zostać wyświetlone.
• Widok (view) – odpowiada za wybór danych do wyświetlenia (na podstawie
przesłanego zapytania, informacji nt. obecnie zalogowanego użytkownika,
itp.)
Wzorzec MVT (lub bardzo podobny, MVC – ang. model-view-controller) jest w
chwili obecnej najczęściej stosowanym wzorcem w trakcie tworzenia aplikacji
internetowych. Pozwala on skutecznie rozdzielić poszczególne warstwy, dzięki czemu
wymiana jednego modułu nie wpływa w żaden sposób na działanie całej aplikacji.
Doskonale można to zobrazować na przykładzie aplikacji, której zadaniem byłoby
załadowanie danych z bazy MySQL oraz wyświetlenie ich na stronie internetowej.
Widok odpowiadałby za utworzenie obiektu modelu oraz pobranie danych – to, w jaki
sposób będą one załadowane/przetworzone/itp. zależy tylko od modelu. Następnie,
zadaniem widoku byłoby załadowanie szablonu oraz przekazanie mu odpowiednich
danych – analogicznie do sytuacji z modelem, widok nie wie jaką czcionkę będzie
napisany tekst lub czy dane będą wypisane jako lista czy tabelka (zależy to tylko i
wyłącznie od pliku, w którym znajduje się szablon). Dzięki takiemu podejściu zmiana
szaty graficznej podstrony ogranicza się tylko do zmiany uniwersalnego pliku szablonu,
a dopisanie kolejnej opcji przechowywania danych (np. w plikach tekstowych)
sprowadza się do utworzenia kolejnej klasy modelu.
3.3. Baza danych
Django wspiera różne typy systemów baz danych, a ich wykorzystanie sprowadza
się do wyboru i odpowiedniego skonfigurowania danego silnika. Standardowo możliwa
jest obsługa baz MySQL, PostgreSQL, SQLite oraz Oracle.
Dodatkowo framework pozwala na automatyczne generowanie oraz aktualizację
struktury poszczególnych tabel na podstawie odpowiadających im modeli (rys. 3. i 4.).
Dzięki temu programista może skupić się na zaprojektowaniu klasy modelu, a
utworzeniem tabeli, założeniem indeksów na pola oraz zapewnieniem obsługi relacji
między tabelami zajmie się Django.
4
Rys. 3. Przykładowy kod klasy modelu „Entry”.
Rys. 4. Tabela w bazie danych automatycznie wygenerowana na podstawie
modelu „Entry”.
W skład Django wchodzi również zaawansowany system ORM (ang. object
relational mapping), który pozwala na reprezentację danych pobranych z bazy jako
obiektów. Zwrócone przez bazę rekordy są obiektami z zaimplementowanymi
metodami umożliwiającymi zapisanie nowego rekordu, modyfikację czy usunięcie. Co
więcej, framework zapewnia wsparcie dla obsługi relacji między różnymi tabelami,
dzięki czemu możliwa jest optymalizacja zapytań i zarządzanie „powiązanymi”
rekordami w innych tabelach.
3.4. Panel administracyjny
Sztandarową funkcjonalnością Django, która zdecydowanie odróżnia go od reszty
webowych frameworków, jest aplikacja „Django admin”, która zapewnia automatyczne
generowanie panelu administracyjnego na podstawie utworzonych modeli. Podstawowe
możliwości:
• System użytkowników zarządzających treścią wraz z możliwością ograniczenia
uprawnień.
• Zarządzanie danymi wewnątrz modelu – dodawanie nowych rekordów, edycja
oraz usuwanie istniejących.
• Automatyczne tworzenie formularzy na podstawie pól modelu wraz z walidacją
zapisywanych danych.
• Wyświetlanie listy rekordów, możliwość ich sortowania, wyszukiwania oraz
filtrowania według określonych kryteriów.
• Definiowanie własnych podstron w panelu.
Rysunki 5 oraz 6 przedstawiają wygląd panelu administratora, który został
wygenerowany za pomocą mniej niż 40 linijek kodu w języku Python.
5
Rys. 5. Lista rekordów danej tabeli.
Rys. 6. Automatycznie wygenerowany formularz dodawania rekordu.
3.5. Inne cechy
Ze względu na ograniczoną ilość miejsca nie sposób wypisać wszystkich
możliwości, które oferuje framework. Zapewnia on jednak wsparcie praktycznie dla
wszystkich funkcjonalności odgrywających największe znaczenie z punktu widzenia
programisty aplikacji internetowych, m.in.:
• Cache [6] – jest to moduł odpowiedzialny za przechowywanie danych
pobranych z bazy lub wymagających skomplikowanych obliczeń i umieszczanie
ich w pamięci podręcznej (np. w plikach tekstowych). Dzięki temu nie jest
konieczne ciągłe „odpytywanie” bazy danych, co w przypadku bardziej
rozbudowanych aplikacji znacznie zmniejsza czas działania aplikacji.
• Formularze [7] – zapewnia obsługę formularzy, od ich wyświetlania w formie
HTML, aż po walidację danych wprowadzonych przez użytkownika.
• Własne adresy URL [8] – pozwala powiązać wyrażenia regularne występujące
w adresie strony z określonym widokiem, który ma zostać wyświetlony.
• Internacjonalizacja oraz lokalizacja [9] – zestaw narzędzi umożliwiający
przetłumaczenie komunikatów i tekstów na stronie oraz udostępnienie jej w
różnych wersjach językowych.
4 Podsumowanie
Framework Django, który został przedstawiony w tym artykule, niesie ze sobą
szereg usprawnień znacznie przyspieszających proces tworzenia aplikacji
internetowych. Jego zaletami są przede wszystkim: przejrzystość, świetna
6
dokumentacja, szybkość działania oraz ogromna funkcjonalność, przez co stale zyskuje
on na popularności. Ciągle powstają nowe projekty napisane z wykorzystaniem Django,
które udowadniają, że dobrze spisuje się on również pod bardzo dużym obciążeniem –
przykładami mogą być takie serwisy jak Instagram [10] czy strona internetowa Mozilli
[11].
Django jest narzędziem, którego zadaniem jest przeniesienie uwagi programisty na
to, jak ma działać końcowa aplikacja, poprzez zmniejszenie ilości czasu spędzonej na
implementacji rozwiązań. Nie da się zaprzeczyć, że framework wywiązuje się z niego
znakomicie i świetnie spełnia swoją rolę.
Bibliografia
[1] http://www.php.net
[2] http://w3techs.com/technologies/overview/programming_language/all
[3] http://www.djangoproject.com
[4] http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/
[5] http://www.python.org/dev/peps/pep-0020/
[6] https://docs.djangoproject.com/en/1.5/topics/cache/
[7] https://docs.djangoproject.com/en/1.5/topics/forms/
[8] https://docs.djangoproject.com/en/1.5/topics/http/urls/
[9] https://docs.djangoproject.com/en/1.5/topics/i18n/
[10]http://www.instagram.com/
[11]http://www.mozilla.org
7
Download