SlideShare une entreprise Scribd logo
1  sur  64
Guido van Rossum
ABC
Przykład
Skryptowy
Duck typing
2 != “2”

 Silne typowanie
Wcięcia są znaczące
Klasy są obiektami



Refleksja

           Metaklasy
                         Otwarte klasy



    Metaprogramowanie
Refleksja
Klasy są obiektami
Multiparadygmatowy
Przykład obiektowy
Przykład funkcyjny
Przykład AOP
wyrażenia regularne

                                        daty

                                 liczby zespolone

             wielowątkowość         wieloprocesowość

        SQLite     archiwa zip          kryptografia

JSON   XML        usługi sieciowe         testowanie

       Batteries included!
Benchmarki
Na podstawie testów ze strony
http://shootout.alioth.debian.org/
Java > Python > Ruby
Perspektywy
Beautiful is better than ugly
Explicit is better than implicit
Readability counts
Special cases aren’t special enough to
           break the rules



  Although practicality beats purity
Errors should never pass silently
Unless explicitly silenced
There should be one - and preferably
  only one - obvious way to do it
Although that way may not be obvious
     at first unless you're Dutch
http://stepniowski.com
    /x/python.html




               Ćwiczenia!
Adrian Holovaty
Rekomendowane przez Guido
MVC
Wzorzec Active Record
ORM
ORM
PostgreSQL
     MySQL
     SQLite
     Oracle
     DB2
Wspierane bazy danych
Szablony
Szablony
Widoki
Różne                Date based
direct_to_template   archive_index
redirect_to          archive_year
object_list          archive_month
object_detail        archive_week
create_object        archive_day
update_object        archive_today
delete_object        object_detail


   Widoki uogólnione
Wzorce URL
Struktura katalogów
Formularze
LAPD
Chciałem umieścić tutaj jakieś
benchmarki, ale i tak byście w
       nie nie uwierzyli
Dlaczego?
Aplikacje - killer feature
Tagowanie
               Wyszukiwanie
                                     Paginacja
               pełnotekstowe

 Rejestracja
                         Powiadomienia           FAQ

     Przetwarzanie
                                     Ocenianie
         zdjęć        Zarządzanie
                     użytkownikami




Ortogonalne funkcje serwisu
Czym jest aplikacja?
Django skłania do podziału
   projektu na aplikacje
Zarządzanie użytkownikami

                            Flatpages

                      Internacjonalizacja

        Wysyłanie e-maili      Komentarze

 Sitemaps          RSS           geodjango



Batteries included!
Admin
Admin
Admin
1.1 β
http://stepniowski.com
       /x/pid.html




           Ćwiczenia!
Dzięki!
http://stepniowski.com

  http://zuber.blip.pl

Contenu connexe

Similaire à Wprowadzenie do Pythona i Django

JavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIJavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
Mikroformaty i Rich Snippety
Mikroformaty i Rich SnippetyMikroformaty i Rich Snippety
Mikroformaty i Rich SnippetySławomir Borowy
 
WordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelkiWordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelkiInterSynergy
 
Podstawy Asp.Net Mvc 1.0 W 3600 Sekund
Podstawy Asp.Net Mvc 1.0 W 3600 SekundPodstawy Asp.Net Mvc 1.0 W 3600 Sekund
Podstawy Asp.Net Mvc 1.0 W 3600 Sekundemdzej
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaWydawnictwo Helion
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Mikroformaty i Rich Snippets
Mikroformaty i Rich SnippetsMikroformaty i Rich Snippets
Mikroformaty i Rich SnippetsSilesia SEM
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Liferay sgl - prezentacja 2011.01.28
Liferay   sgl - prezentacja 2011.01.28Liferay   sgl - prezentacja 2011.01.28
Liferay sgl - prezentacja 2011.01.28Szymon Gołębiewski
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...Paq Studio
 
Activiti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziActiviti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziMaciek Próchniak
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftBiznes 2.0
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureWebhosting.pl
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowoXSolve
 

Similaire à Wprowadzenie do Pythona i Django (20)

JavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie IIJavaScript. Ćwiczenia praktyczne. Wydanie II
JavaScript. Ćwiczenia praktyczne. Wydanie II
 
Mikroformaty i Rich Snippety
Mikroformaty i Rich SnippetyMikroformaty i Rich Snippety
Mikroformaty i Rich Snippety
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
Scala
ScalaScala
Scala
 
WordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelkiWordUp Łódź - Sage - Twoje szablony będą jak supermodelki
WordUp Łódź - Sage - Twoje szablony będą jak supermodelki
 
Podstawy Asp.Net Mvc 1.0 W 3600 Sekund
Podstawy Asp.Net Mvc 1.0 W 3600 SekundPodstawy Asp.Net Mvc 1.0 W 3600 Sekund
Podstawy Asp.Net Mvc 1.0 W 3600 Sekund
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Mikroformaty i Rich Snippets
Mikroformaty i Rich SnippetsMikroformaty i Rich Snippets
Mikroformaty i Rich Snippets
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Liferay sgl - prezentacja 2011.01.28
Liferay   sgl - prezentacja 2011.01.28Liferay   sgl - prezentacja 2011.01.28
Liferay sgl - prezentacja 2011.01.28
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...
Kiedy łatać błędy, a kiedy dokładać "ficzery"? Jak układać kolejkę zadań w te...
 
Ext js
Ext jsExt js
Ext js
 
React Native by Artur Staszczyk
React Native by Artur StaszczykReact Native by Artur Staszczyk
React Native by Artur Staszczyk
 
Activiti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziActiviti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodzi
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows Azure
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowo
 

Wprowadzenie do Pythona i Django

Notes de l'éditeur

  1. Django to framework do tworzenia stron internetowych dla perfekcjonistów z terminami. Ta prezentacja ma przekonać was do użycia Django w następnym projekcie webowym. Skupiam się tu bardziej na przedstawieniu zalet Pythona i Django, niż na nauce kodowania w nich. Od tego są doskonałe tutoriale na http://docs.python.org i http://docs.djangoproject.com/. Zakładam też, że słuchacze umieją już programować (czytaj: znają co najmniej jeden język programowania wysokiego poziomu i umieją w nim zaimplementować algorytm quick sort).
  2. Django napisane jest w języku programowania Python. Serwisy internetowe pisane przy użyciu Django również pisze się głównie w Pythonie. (Zazwyczaj powyżej 60% kodu serwisu to kod Pythona. Reszta to szablony Django, HTML, CSS i SQL). Zaczniemy od krotkiego wprowadzenia do tego języka.
  3. Twórcą Pythona i jego BDFL (Benevolent Dictator for Life - osoba mająca decydujący głos w decyzjach dotyczących rozwoju języka) jest Guido van Rossum. Jest on Holendrem. Obecnie pracuje w Google nad dalszym rozwojem Pythona.
  4. Python został stworzony pod koniec lat ‘80 jako następca języka ABC. W związku z tym jest starszy od Javy! Język ABC był językiem stworzonym do nauki programowania, tak samo jak Pascal, BASIC czy AWK. Po ABC Python odziedziczył m.in. prostotę oraz kontrowersyjną składnię, o której za chwilę.
  5. W tym momencie typowy programista powinien już zacząć się nudzić. Pora więc na pokazanie przykładowego kodu! Slajd przedstawia implementację algorytmu quick sort w 5 linijkach (nie licząc komentarzy). Kod wykorzystuje obcięcia (list[] w linijkach 6-8) oraz list comprehensions ([x for x in list] w linijkach 6 i 8). Te drugie zostały zapożyczone z języka Haskell. Całość powinna być dość czytelna.
  6. Python to jeden z 3 oficjalnych języków Google, obok C++ i Javy. Dużo usług Google jest tworzone w Pythonie, a potem przepisywane na inne języki dla zwiększenia wydajności. Inne firmy i organizacje używające Pythona to m.in. NASA, Pixar, Rackspace i Canonical (twórcy Ubuntu).
  7. Python jest językiem skryptowym. Programy w tym języku nie muszą być kompilowane. Jednak podczas uruchomienia skryptu w Pythonie tworzone są pliki z bytecode. Pozwala to na szybsze załadowanie tego skryptu w przyszłości przez interpreter. Instrukcje Pythona są bardzo wysokiego poziomu. Szacuje się, że przy normalnym stosowaniu jedna instrukcja w języku Python odpowiada ~20 instrukcjom w C.
  8. Python jest językiem dynamicznie typowanym, tak jak np. PHP czy Ruby. Często jest to określane jako duck typing, czyli “Jeśli coś chodzi jak kaczka i kwacze jak kaczka to jest kaczką”. Typy zmiennych są sprawdzane dopiero w czasie wykonywania skryptu.
  9. Nie należy mylić dynamicznego typowania ze słabym typowaniem. Python jest językiem silnie typowanym, w przeciwieństwie do np. PHP czy C. Oznacza to, że nigdy nie zostanie wykonana instrukcja na typie, który jej nie obsługuje. Python zgłosi przy takiej próbie błąd wykonania.
  10. W Pythonie wcięcia są znaczące. Ta cecha języka budzi najwięcej kontrowersji. Została ona odziedziczona po ABC. Przyzwyczajenie się do wcięć wymaga trochę czasu, ale jest tego warte. Ostatecznie jest to jedna konwencja kodowania mniej do sprzeczania się przy programowaniu zespołowym.
  11. Python jest bardzo dynamicznym językiem, tak samo jak Ruby i w przeciwieństwie do np. Smalltalka czy PHP. Utrudnia to stworzenie dobrego IDE, ale pozwala na stosowanie wielu technik określanych wspólnie jako metaprogramowanie. Na dalszych slajdach wspomnę w skrócie o refleksji i tym, że klasy są obiektami.
  12. Praktycznie wszystkie cechy programu w Pythonie można łatwo poznać z wnętrza tego programu, podczas jego wykonywania. Refleksja jest w Pythonie bardzo zoptymalizowana. Powyższy kod wypisuje wszystkie metody danego obiektu wraz z ich opisami. Zwróćcie uwagę na jego ogólność. Obiekt w jego rozumieniu możeby być modułem, klasą, listą albo słownikiem. Taką ogólność otrzymujemy praktycznie za darmo, dzięki dynamicznemu typowaniu.
  13. Wszystko w Pythonie jest obiektem - w tym również klasy i funkcje. Pozwala to na przekazywanie klas i funkcji jako argumenty funkcji oraz na (uwaga!) tworzenie nowych klas i funkcji w trakcie działania programu. Powyższy kod implementuje wzorzec projektowy Fabryka. Znany z Javy i C++, w Pythonie jest on całkowicie nadmiarowy, ponieważ sama klasa jest fabryką obiektów.
  14. Python pozwala na programowanie przy użyciu wielu różnych konwencji, tak jak np. C++. Tak jak w innych językach skryptowych można w nim pisać imperatywnie, ale przydaje się to tylko przy najprostszych skryptach.
  15. Wspominałem już o tym, że wszystko w Pythonie jest obiektem. Na slajdzie jest kod bardzo prostej klasy implementującej interfejs stosu. Jako kontener storage wspierający stos używamy listy (inicjalizowanej konstrukcją []). Implementacja obiektów opiera się na słownikach, co objawia się np. możliwością dynamicznego dodawania atrybutów do nich. __init__ to konstruktor (jak w Javie).
  16. Funkcje są w Pythonie obiektami, można więc przekazywać je jako argumenty i zwracać z funkcji. Kod ze slajdu zawiera implementację funkcji map w Pythonie. Druga implementacja używa bardzo wygodnych list comprehensions.
  17. Podaję jeszcze przykład Aspect Oriented Programming. Powyższy program dodaje logowanie do wszystkich funkcji klasy Stack (opisanej na slajdzie 15). Zauważcie użycie domknięcia, refleksji oraz dynamicznego typowania do osiągnięcia celu.
  18. Filozofia Pythona to “batteries included!”. Python posiada bardzo obszerną bibliotekę standardową zawierającą m.in. implementacje wielu usług sieciowych (SMTP, HTTP...), parsery XML, xUnit, klienta bazy SQLite i obsługę archiwów ZIP. Liczby zespolone są wbudowane w Pythona. Wyrażenie (2 + 3j) oznacza liczbę zespoloną z częścią rzeczywistą 2 i częścią urojoną 3.
  19. Wszyscy kochają benchmarki, mimo że nie należy im ufać, bo mierzą wydajność języków/frameworków w bardzo specyficznych warunkach. Pora na przedstawienie benchmarków Pythona.
  20. Porównanie Pythona 2.6 z Java 6 i Ruby 1.8.7 ze strony http://shootout.alioth.debian.org/. Testy użyte w tym benchmarku są bardzo niskopoziomowe, stąd tak duże różnice w prędkości Pythona i Javy.
  21. Na podstawie benchmarków można uznać, że Java jest szybsza od Pythona, który jest za to szybszy od Ruby. Jeżeli chodzi o ilość linii kodu potrzebnych do zapisania kodu programu, zwycięzcami są Python i Ruby. Java wymaga 2-3x więcej kodu do wykonania podobnych operacji, mimo że testy są bardzo niskopoziomowe.
  22. Nie należy się bać o przyszłość języka Python. Ma on oficjalne wsparcie Google. Rozwijają się alternatywne do CPython implementacje: IronPython pod .NET i Jython pod JVM. Niedawno Google udostępniło też hosting dla serwisów webowych w Pythonie: Google App Engine. Stronę obsługującą do kilku milionów odsłon miesięcznie można tam trzymać za darmo. Powyżej tego limitu płaci się tylko za wykorzystane zasoby.
  23. Uruchomcie interaktywną powłokę Pythona i wpiszcie w niej komendę “import this”. Wyświetli się wam 19 zdań znanych jako The Zen of Python. Przyjrzymy się najciekawszym z nich.
  24. Matematyczne piękno tego kodu wynika raczej z algorytmu, ale zauważcie jak mało znaków jest tutaj nadmiarowych. Praktycznie pseudokod.
  25. Zauważcie, że zakresy są explicite (słowo self). Importowanie modułów i używanie obiektów i funkcji z zaimportowanych modułów również jest explicite.
  26. Pierwsza linia tego kodu wypisuje proste “Hello world”. Porównajcie ją z odpowiednim programem w C++ lub Javie. Wcięcia bardzo pomagają w zwiększeniu czytelności kodu. Pomagają w tym również deklaratywne konstrukcje, takie jak sum i list comprehensions.
  27. Python nie posiada oddzielnego typu dla znaków. Znak to ciąg znaków o długości jeden. Ale pragmatyzm przeważa nad purytanizmem: dla zachowania zgodności z C udostępnione zostały funkcje ord i chr.
  28. Wszystkie sytuacje wyjątkowe powodują w Pythonie zgłoszenie wyjątku. Wyjątki są stosowane nawet w sytuacjach takich, jak wyczerpanie się iteratora.
  29. Oczywiście Python pozwala na wyciszanie wyjątków konstrukcją try...except...finally. Można w ten sposób zaimplementować np. opcjonalne importowanie.
  30. There should be one - and preferably only one - obvious way to do it. Jest to zasada będąca dokładnym przeciwieństwem filozofii języka Perl (od którego Ruby bierze swoje korzenie). Bardzo zwiększa ona łatwość zrozumienia cudzego kodu.
  31. “Ale ta droga nie zawsze jest oczywista, chyba że jesteś Holendrem”. Wystarczy spojrzeć na składnię operatora trynarnego w Pythonie, by to zobaczyć :-)
  32. Ćwiczenia z Pythona znajdziecie na stronie http://stepniowski.com/x/python.html. Mam nadzieję, że uporamy się z nimi w ciągu 15 minut. Ćwiczenia są dość proste, ale nie znacie jeszcze języka, więc mogą wam sprawić trudności. Nie wahajcie się zadawać pytań!
  33. To tyle, jeżeli chodzi o wprowadzenie do Pythona. Wracamy do Django!
  34. Twórcą Django jest Adrian Holovaty. Framework Django został stworzony na potrzeby gazety Lawrence Journal. Powstał on równolegle do Ruby on Rails, obrał też inną drogę rozwoju.
  35. Framework Django wziął swoją nazwę od muzyka jazzowego Django Reinhardta. Nawiązania do jazzu są dość częste w środowisku Djangonautów. Django zostało wyekstrahowane z CMS Ellington. Ellington to też muzyk jazzowy :-)
  36. Od momentu usunięcia magii (zachowań implicite, których działanie było trudne do przewidzenia dla osób nie znających kodu frameworku) jeszcze przed wersją 1.0 Django jest rekomendowane przez Guido jako “najbardziej Pythoniczne”. Django stara się przestrzegać Zen of Python. Guido sam napisał w nim system do code review dla Pythona (działający na Google App Engine).
  37. Kto używa Django? Dla równowagi postanowiłem umieścić tutaj tylko polskie serwisy. Od góry są to: Oiola (platforma do organizowania eventów i konferencji), Wydarzysie.net (powiadomienia o ważnych i ciekawych wydarzeniach w okolicy), Szarada.net (serwis dla miłośników krzyżówek), grono.net (pierwszy polski serwis społecznościowy), plom (serwis pozwalający na prowadzenie miniblogów, podobny do Blipa i Twittera), Ocenfotke.pl (ocenianie zdjęć użytkowników), wolnelektury.pl (biblioteka internetowa z tekstami polskich lektur szkolnych, stworzona przeze mnie), strona Super Expressu. Należy pamiętać, że są to tylko przykłady. Wiele serwisów z musu pominąłem.
  38. Django jest frameworkiem MVC (Model, View, Controller), tak jak np. Ruby on Rails. Wyraźnie oddzielone są w nim kawałki kodu odpowiedzialne za logikę biznesową i przechowywanie danych (Model), wyświetlanie tych danych (View) oraz wybór operacji do wykonania i obsługę interfejsu użytkownika (Controller).
  39. Trochę oszukałem. Twórcy określają Django jako framework MTV (Model, Template, View). Bierze się to stąd, że we frameworkach webowych MVC programista tak naprawdę nie pisze Controllera - jest on dostarczany przez sam framework (w Rails Controller w tym sensie to Routes). Jest to zastosowanie wzorca Front Controller.
  40. Modele w Django są tworzone według wzorca Active Record. Modele to obiekty, które mają określone atrybuty oraz potrafią wczytać i zapisać się do bazy danych.
  41. Wczytywaniem modeli z bazy danych zarządza ORM (Object-Relational Mapper). To właśnie ORM odpowiada za największy wzrost produktywności programisty we frameworkach webowych. ORMy dzielą się na te od najprostszych (ActiveRecord w Ruby on Rails) do najbardziej skomplikowanych (Hibernate dla Javy, SQLAlchemy dla Pythona). ORM Django jest gdzieś po środku.
  42. ORM Django obsługuje skomplikowane zapytania ze złączeniami i wieloma warunkami. Obsługuje też transakcje. Pozwala również na wybieranie tylko interesujących nas atrybutów. Kiedy ORM zawodzi, łatwo jest wrócić do zwykłego SQL.
  43. Django wspiera tylko relacyjne bazy danych. Oficjalnie wspierane są PostgreSQL, MySQL, SQLite i Oracle. IBM pracuje obecnie nad backendem Django do DB2. Na ćwiczeniach będziemy używać SQLite, którego klient wbudowany jest w Pythona w wersji 2.5 i nowszych.
  44. Szablony. {{ zmienna }} wstawia zmienną w miejsce wystąpienia. {% tag %} wykonuje zaś określoną w nim czynność. Django zawiera bogatą bibliotekę wbudowanych tagów. Np. {% url %} wstawia adres URL danego widoku (o tym za chwilę). {% block %} definiuje zaś blok treści, który można potem nadpisywać (bardzo ważna funkcja, o tym też za chwilę!). Możliwe jest również tworzenie własnych tagów.
  45. Killer feature Django to możliwość dziedziczenia szablonów. W tym przykładzie dziedziczymy większość z szablonu base.html (przedstawionego na slajdzie 44), ale nadpisujemy blok content, wstawiając w jego miejsce listę obiektów. Dzięki temu nie musimy powtarzać w różnych miejscach tego samego kodu.
  46. Opisałem już modele i szablony. Czas na warstwę, która je połączy: widoki. Widoki to zwykłe funkcje Pythona, które jako pierwszy argument biorą obiekt klasy HttpRequest i zwracają obiekt klasy HttpResponse. W tej prostocie tkwi ich siła.
  47. Jak wykorzystać to, że widoki to zwykłe funkcje? Wiele widoków da się uogólnić. Django jest rozprowadzane z biblioteką ogólnych widoków.
  48. Opisaliśmy już wszystkie warstwy MTV, ale trzeba jeszcze umieć wybrać widok do wyświetlenia. Tutaj na pomoc przychodzi wzorzec z pliku urls.py. Określa on mapowanie pomiędzy adresami URL a widokami.
  49. Całość. Tak wygląda struktura katalogów przykładowego projektu. Nie opisałem jeszcze pliku settings.py - jest on odpowiedzialny za globalne ustawienia projektu, takie jak np. użytkownik i hasło do bazy danych, czy położenie katalogu z szablonami. settings.py napisany jest w Pythonie, co daje nam do dyspozycji całą siłę ekspresji tego języka przy pisaniu bardziej złożonych plików ustawień.
  50. Pozostała jeszcze kwestia walidacji danych wprowadzanych przez użytkowników. Jeśli ktoś programował w PHP, wie jak męczące i błędogenne może to być. Na pomoc przychodzi pakiet forms. Formularze zajmują się walidacją danych, ale potrafią się również wyświetlać. Ich składnia podobna jest do składni modeli. Dostępny jest skrót do tworzenia formularzy na podstawie modeli (klasa ArtistForm na dole slajdu).
  51. Wdrożenie Django. LAPD = Linux, Apache, PostgreSQL, Django. Django można połączyć z Apache przez CGI, FastCGI, mod_wsgi, mod_python. Jest to stos tak samo elastyczny jak LAMP.
  52. Chciałem umieścić tutaj jakieś benchmarki, ale i tak byście w nie nie uwierzyli. Faktem jest, że o ile Python jest wolniejszy od wielu języków, w tym Javy, Django prześciga większość frameworków (w tym Symfony, CakePHP, Ruby on Rails i frameworki J2EE).
  53. Dlaczego Django jest tak szybkie, mimo że Python jest względnie wolny? Moim zdaniem tajemnica tkwi w dynamiczności tego języka. Pierwsze: Dużo rzeczy dostępnych za darmo w Pythonie trzeba implementować samemu w innych językach (jak PHP czy Java), przez co traci się na prędkości. Drugie: globalna optymalizacja.
  54. Pozostał do omówienia jeszcze jeden killer feature Django. Są to aplikacje.
  55. Każdy serwis internetowy posiada wiele ortogonalnych funkcji. Wiele z tych funkcji nie zależy za bardzo od typu serwisu. Dlaczego implementować je stale od nowa? Inne frameworki mają od tego różne systemy pluginów. Django ma aplikacje.
  56. Aplikacja jest podobna do małej strony internetowej: może zawierać własne modele, widoki, szablony, formularze oraz wzorce URLi. Na slajdzie znajduje się hierarchia katalogów ściśle tajnego kodu serwisu WolneLektury.pl ;-)
  57. Django od początku skłania programistę do myślenia w kategorii ortogonalnych aplikacji. W pliku settings.py definiujemy listę aplikacji składających się na projekt. Domyślnie stworzony projekt zawiera już 4 aplikacje, odpowiedzialne za obsługę sesji HTTP, autoryzację użytkowników i ogólne powiązania pomiędzy modelami.
  58. Django, tak samo jak Python, przestrzega filozofii “batteries included!”. Pozwala na bardzo wiele rzeczy out of the box (większość jest zaimplementowana jako aplikacje i da się je wyłączyć).
  59. Jeżeli aplikacje to killer feature Django, to co można powiedzieć o adminie? Admin to aplikacja rozprowadzana razem z Django, pozwalająca na szybkie stworzenie panel administracyjny naszego serwisu. Domyślnie admin służy do prostego zarządzania modelami w sensie CRUD, ale jest bardzo rozszerzalny. Właściwie można go traktować jako framework wewnątrz frameworku.
  60. Kilka screenshotów z admina.
  61. Prostota podłączenia własnych modeli do admina.
  62. W momencie, gdy to piszę, na stronie http://djangoproject.com można już ściągnąć Django 1.1 beta. Ta wersja wprowadza wiele nowych funkcji, takich jak: obsługa ETagów, funkcje agregacji w ORMie, opóźnionym pobieranie pól z bazy danych, możliwość wykonywania akcji na wielu obiektach naraz w adminie.
  63. Ćwiczenia z Django znajdziecie na stronie http://stepniowski.com/x/pid.html. Pamiętajcie, w razie jakichkolwiek problemów, pytajcie!
  64. Mam nadzieję, że prezentacja ta zachęciła was do wypróbowania Pythona i Django. W razie dodatkowych pytań możecie mnie znaleźć na Blipie (gdzie występuję jako ^zuber). Więcej namiarów na mnie znajdziecie na mojej stronie domowej http://stepniowski.com.