WICKET VS. DJANGO Leszek Gawron vs. Michał Leszczyński
0. Główne ficze 1. Środowisko developerskie AGENDA 2. Uruchomienie projektów 3. Warstwa DAO/serwisów 4. Tworzenie UI 5. Templating 7. i18n 8. Reusability 9. Security 10. Wsparcie dla Web 2.0
Wicket Swing-like OO Component Model Django Object-relational mapper GŁÓWNE FICZE Reusable Components Ease of Development Separation of Concerns Transparent, Scalable Clustering Support Superb AJAX support Automatic admin interface Elegant URL design Template system Cache system Transparent Back Button Support Internationalization
ŚRODOWISKO DEVELOPERSKIE
Wicket Maven Dowolne IDE dla Javy edytor HTML Wicket Bench eclipse plugin Django eclipse wtyczka pydev do pythona brak wtyczki do django wbudowany serwer ŚRODOWISKO DEVELOPERSKIE
URUCHOMIENIE PROJEKTÓW
WICKET Co potrzebujesz Maven Eclipse + m2eclipse + edytory XML/HTML Wygenerowanie projektu mvn archetype:create \ -DarchetypeGroupId=org.apache.wicket \ -DarchetypeArtifactId=\ wicket-archetype-quickstart \ -DarchetypeVersion=1.4-rc6 \ -DgroupId=com.mobilebox -DartifactId=jug1 URUCHOMIENIE PROJEKTU Uruchomienie Archetyp dostarcza klasę Start.jar (embedded Jetty)
WICKET URUCHOMIENIE PROJEKTU
DJANGO Co potrzebujesz Python, Django, eclipse + pydev plug-in Wygenerowanie projektu URUCHOMIENIE PROJEKTU
DJANGO Wygenerowanie aplikacji URUCHOMIENIE PROJEKTU
DJANGO Konfiguracja projektu settings.py W settings.py ustawiamy takie rzeczy jak: tryb DEBUG dostęp do bazy danych middleware procesory kontekstu aplikacje etc URUCHOMIENIE PROJEKTU
WARSTWA DAO/SERWISÓW
WICKET Warstwa DAO/serwisów znajduje się poza kompetencjami Wicketa, ale... możemy korzystac z integracji z frameworkami Dependency Injection: WARSTWA DAO/SERWISÓW
WICKET WARSTWA DAO/SERWISÓW
DJANGO Model (models.py) Klasy dziedziczące po django.db.models.model mapują się na tabele w bazie danych. Pole klasy = pole w tabeli WARSTWA DAO/SERWISÓW
DJANGO `manage.py syncdb` WARSTWA DAO/SERWISÓW
DJANGO model -> tabela WARSTWA DAO/SERWISÓW
TWORZENIE UI
WICKET - UI <h1 wicket:id= hello >[text goes here]</h1> TWORZENIE UI <h1>hello World</h1> new Label( hello, Hello World );
WICKET - UI <select wicket:id= role /> new DropDownChoice( "role", Arrays.asList( Role.values() ) ) TWORZENIE UI <select name="role"> <option value="0">administrator</option> <option selected="selected" value="1">receptionist</option> <option value="2">financier</option> <option value="3">customer</option> </select>
WICKET - UI <a href="#" wicket:id="donasty">do it!</a> TWORZENIE UI Link link = new Link( "donasty" ) { @Override public void onclick() { setresponsepage( new InterestingPage() ); } }
WICKET - FORMULARZE TWORZENIE UI
WICKET - FORMULARZE TWORZENIE UI
WICKET - FORMULARZE TWORZENIE UI
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI Dostawca danych Definicje kolumn Komponent DataTable
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI <div wicket:id= tabs >
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI
WICKET ZAAWANSOWANE KOMPONENTY TWORZENIE UI
DJANGO PANEL ADMINISTRACYJNY Rejestracja modelu (admin.py) TWORZENIE UI `manage.py syncdb` CRUD jest gotowy do użycia
DJANGO ZAAWANSOWANY PANEL Klasa admina i formularza (forms.py) TWORZENIE UI Rejestracja modelu z klasą admina (admin.py)
DJANGO ZAAWANSOWANY PANEL Panel TWORZENIE UI
TEMPLATING
WICKET Strony dziedziczą markup rodzica TEMPLATING Każdy komponent może dostarczad własny kod HTML
WICKET JAK TO UZYSKAĆ? TEMPLATING
WICKET - DZIEDZICZENIE MARKUPU TEMPLATING
WICKET - DZIEDZICZENIE MARKUPU TEMPLATING
WICKET - DZIEDZICZENIE MARKUPU TEMPLATING
WICKET - DZIEDZICZENIE MARKUPU TEMPLATING
WICKET TEMPLATING
WICKET MARKUP KOMPONENTU TEMPLATING
WICKET MARKUP KOMPONENTU TEMPLATING
WICKET MARKUP KOMPONENTU TEMPLATING
WICKET MARKUP KOMPONENTU TEMPLATING
DJANGO MTV Wzorzec MTV "M" - model "T" vide view vide template "V" vide controller vide view MVC MVP MTV WTF? TEMPLATING View determinuje jakie dane zostaną przekazane do Template'a. Jaki jest flow we wzorcu MTV?
DJANGO URLs Konfiguracja wskazanie pliku z mappowaniem URLi (settings.py) Mapowanie URLi z obsługą wyrażeo regularnych (urls.py) TEMPLATING view decimal param
DJANGO MTV View TEMPLATING
DJANGO MTV Poszukiwania szablonu zgodnie z listą z settings.py TEMPLATING Template
DJANGO MTV Template TEMPLATING
DJANGO MTV Template - filters TEMPLATING built-in date filter
DJANGO MTV Template - tags TEMPLATING Usage:
I18N
WICKET I18N <a href="#" wicket:id="donasty">do it!</a> Wersje językowe?
WICKET I18N <a href="#" wicket:id="donasty">do it!</a> <a href="#" wicket:id="donasty"> <wicket:message key="do.it"> [Do it!] </wicket:message> </a>
WICKET I18N DatePicker Kod Markup DatePicker.java DatePicker.html
WICKET I18N DatePicker Kod Markup Properties DatePicker.java DatePicker.html DatePicker_pl.properties DatePicker_en.properties
WICKET I18N DatePicker Kod Markup Properties DatePicker DatePicker_pl DatePicker_en DatePicker_pl DatePicker_en.java.html.html.properties.properties
WICKET RESOURCE BUNDLE EDITOR I18N http://sourceforge.net/projects/eclipse-rbe/
DJANGO Stworzenie pliku językowego `pl` I18N
DJANGO Co trafia do pliku językowego? I18N
REUSABILITY
WICKET DatePicker REUSABILITY Kod Markup Properties Resources JPG DatePicker.java DatePicker _pl.html DatePicker _en.html DatePicker _pl.properties DatePicker _en.properties Js PNG GIF ICO CSS
WICKET Zrób z tego REUSABILITY JAR i masz reużywalny komponent
DJANGO Reusable applications locale REUSABILITY template template-tag model
DJANGO Reusable applications - instalacja REUSABILITY
DJANGO Reusable applications - użycie REUSABILITY
WEB 2.0
DJANGO WEB 2.0 This page has been intentionally left blank
WICKET WEB 2.0 LIVE DEMO!
LINKS
DJANGO Octavo s beta: WEB 2.0 http://github.com/mleszczynski/octavo/tree/master
NARESZCIE KONIEC!