Bazy Danych i Usługi Sieciowe



Podobne dokumenty
Bazy Danych i Usługi Sieciowe

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Aplikacje WWW - laboratorium

Wykład 03 JavaScript. Michał Drabik

Systemy internetowe Wykład 3 PHP

FORMULARZE. G. Przęczek

Podstawy JavaScript ćwiczenia

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Obiektowe bazy danych

Aplikacje WWW - laboratorium

Umieszczanie kodu. kod skryptu

Krótki kurs JavaScript

Programowanie internetowe

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Dlaczego PHP? - zalety

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Zaawansowane bazy danych i hurtownie danych

Wykład 5: PHP: praca z bazą danych MySQL

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Michał Bielecki, KNI 'BIOS'

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Aplikacje WWW - laboratorium

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Należy ściągnąć oprogramowanie Apache na platformę

Aplikacje internetowe

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Laboratorium 1 Wprowadzenie do PHP

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Języki programowania wysokiego poziomu. PHP cz.1.

Bazy Danych i Usługi Sieciowe

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Rys.2.1. Drzewo modelu DOM [1]

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Projektowanie stron WWW

Oczywiście plik musi mieć rozszerzenie *.php

Bazy danych i strony WWW

Wprowadzenie do Internetu Zajęcia 5

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

SSK - Techniki Internetowe

Programowanie internetowe

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Autor: Joanna Karwowska

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Programy CGI dla baz danych

I.Wojnicki, JiTW. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Aplikacje internetowe - laboratorium

Personal Home Page PHP: Hypertext Preprocessor

Internetowe bazy danych

Cw.12 JAVAScript w dokumentach HTML

CZYM JEST JAVASCRIPT?

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie

Zajęcia 10 obsługa formularzy w PHP

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Zaawansowane aplikacje internetowe

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Kiedy i czy konieczne?

Formularze. 1. Formularz HTML

PHP: bloki kodu, tablice, obiekty i formularze

Bazy Danych i Usługi Sieciowe

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

ZMIENNE. Podstawy PHP

Programowanie i projektowanie obiektowe

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

do drukowania tekstu służy funkcja echo <?php echo "hello world!";?> jeżeli użyjemy jej kilka razy: <?php

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Internetowe bazy danych

Zajęcia 4 - Wprowadzenie do Javascript

Zdarzenia Zdarzenia onload i onunload

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

6. Bezpieczeństwo przy współpracy z bazami danych

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Tworzenie Stron Internetowych. odcinek 10

Aplikacje WWW - laboratorium

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Internetowe bazy danych

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Funkcje i instrukcje języka JavaScript

WTYCZKA FARA-TCM Dane techniczne dla twórców zewnętrznych aplikacji do obsługi map cmentarza

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

INSTALACJA I KONFIGURACJA SERWERA PHP.

JAVAScript w dokumentach HTML (1)

Formularze HTML. dr Radosław Matusik. radmat

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

JavaScript - wykład 4. Zdarzenia i formularze. Obsługa zdarzeń. Zdarzenia. Mysz. Logiczne. Klawiatura. Beata Pańczyk

Projektowani Systemów Inf.

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Właściwości i metody obiektu Comment Właściwości

XML extensible Markup Language. część 5

JAVAScript w dokumentach HTML - przypomnienie

Transkrypt:

Bazy Danych i Usługi Sieciowe Język PHP Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 1 / 43

Plan wykładu 1 Język PHP 2 Składnia PHP 3 Dostęp do bazy danych 4 Przetwarzanie danych z formularzy P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 2 / 43

Język PHP 1 PHP: Hypertext Preprocessor 2 Język skryptowy interpretowany na serwerze www 3 Kod może być zanurzany w plikach HTML 4 Służy to tworzenia interaktywnych aplikacji internetowych 5 Skrypty PHP generują kod HTML wysyłany do klienta przez serwer P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 3 / 43

Przykład Witaj świecie - HTML + PHP <html> <head> <title>php: Witaj świecie</title> </head> <body> <p><?php echo "Witaj świecie!";?></p> </body> </html> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 4 / 43

Przykład c.d. Witaj świecie - wygenerowany HTML <html> <head> <title>php: Witaj świecie</title> </head> <body> <p>witaj świecie!</p> </body> </html> Widok w oknie przeglądarki Witaj świecie! P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 5 / 43

Jak działa PHP? 1 Serwer www dostaje żądanie zasobu zawierającego kod PHP 2 Przekazuje zasób do interpretera PHP, który wykonuje instrukcje zawarte w znacznikach <?php i?> 3 Interpreter PHP zastępuje fragmenty w znacznikach <?php i?> przez kod HTML wygenerowany przez skrypty 4 Serwer www dostaje wygenerowany kod HTML od interpretera PHP 5 Kod HTML jest wysyłany do klienta P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 6 / 43

Przetwarzanie dokumentu PHP 1 Znaczniki HTML poza fragmentami ograniczonymi <?php i?> są przepisywane bez zmian 2 Kod otoczony <?php i?> jest interpretowany, wykonywany i zastępowany przez wypisywany tekst Przetwarzanie dokumentu PHP <h1>tytuł</h2> <?php echo <h3>podtytuł</h3> ;?> <p>dalszy ciąg tekstu.</p> <p><?php echo Zakończenie ;?></p> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 7 / 43

Co można zrobić przy pomocy PHP? 1 Używać wielokrotnie fragmentów kodu w różnych plikach HTML 2 Przetwarzać dane z formularzy 3 Generować raporty z bazy danych 4 Wysyłać wiadomości e-mail 5 Generować obrazy 6 Wykonywać operacje na plikach P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 8 / 43

Instrukcje, zmienne, komentarze Koniec instrukcji - ; echo Witaj świecie ; Zmienne - $ echo $napis; Komentarze - // lub /*...*/ echo Witaj ; // Komentarz do końca linii /* Komentarz w kilku liniach */ P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 9 / 43

Instrukcja warunkowa if-else <?php if ($zmienna1 == $zmienna2 ) { echo <p>zmienne są równe</p> ; } else { echo <p>zmienne nie są równe</p> ; }?> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 10 / 43

Instrukcja warunkowa w kawałkach if-else <?php if ($zmienna1 == $zmienna2) {?> <p>zmienne są równe.</p> <?php } else {?> <p>zmienne nie są równe.</p> <?php }?> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 11 / 43

Typy danych 1 Cztery typy skalarne 1 boolean 2 integer 3 float 4 string 2 Dwa typy złożone 1 array 2 object 3 Dwa typy specjalne 1 resource 2 NULL P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 12 / 43

Typy danych - przykłady $logiczna = TRUE; $napis1 = Tekst ; $napis2 = Inny tekst ; $liczba1 = 12; $liczbanapis = 15 ; $wynik = $liczba1 + $liczbanapis; echo $wynik; // Zostanie wypisane 27 P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 13 / 43

Wartości logiczne 1 Słowa kluczowe TRUE i FALSE 2 Wielkość liter nie ma znaczenia 3 Liczby i napisy mogą być rzutowane na wartości logiczne 4 Jako FALSE uznawane są 1 liczba całkowita 0 2 liczba zmiennoprzecinkowa 0.0 3 pusty łańcuch znaków 4 łańcuch znaków 0 5 pusta tablica 6 pusty obiekt 7 NULL 5 Pozostałe wartości interpretowane są jako TRUE (w tym np. -1) P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 14 / 43

Łańcuchy znaków Pojedynczy cudzysłów echo Jakiś tekst ; echo Arnold once said: I ll be back Podwójny cudzysłów - dodatkowe przetwarzanie echo Jakiś tekst \n i dalszy ciąg w nowej linii ; echo Wartością zmiennej jest: $zmienna ; P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 15 / 43

Operacje na łańcuchach znaków echo <?php echo Witaj świecie ;?> echo ze zmienną <?php $imie = Tomasz ; echo Witaj $imie ;?> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 16 / 43

Operatory Operatory arytmetyczne Operator Opis Wartość 5-3 odejmowanie 2 5 + 3 dodawanie 8 5 * 3 mnożenie 15 15 / 3 dzielenie 5 16 % 5 reszta z dzielenia 1 P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 17 / 43

Operatory Operatory porównania Operator Opis Kiedy prawda $a == $b równe $a i $b są równe bez kontroli typu $a === $b tożsame $a i $b są równe i tego samego typu $a < $b mniejsze $a jest mniejsze od $b $a > $b większe $a jest większe od $b $a <= $b mniejsze równe $a jest mniejsze lub równe $b $a >= $b większe równe $a jest większe lub równe $b $a!= $b nierówne $a i $b są różne bez kontroli typu $a!== $b nietożsame $a i $b są różne lub róznych typów $a <> $b nierówne $a i $b są różne bez kontroli typu P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 18 / 43

Operatory Operatory logiczne Operator Opis Kiedy prawda $a and $b koniunkcja $a i $b są prawdą $a && $b koniunkcja $a i $b są prawdą $a or $b alternatywa $a lub $b są prawdą $a $b alternatywa $a lub $b są prawdą $a xor $b alternatywa wykluczająca $a albo $b są prawdą!$a negacja $a nie jest prawdą P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 19 / 43

Operatory Operatory przypisania Wyrażenie Wartości zmiennych po wykonaniu $a = 5 a=5 $b = $a = 5 a=5, b=5 $c = $a++ a=6, c=5 $d = ++$a a=7, c=6 $a += 3 a=10 $a -= 5 a=5 $a *= 3 a=15 $a /= 5 a=3 $a.= słonie a= 3 słonie P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 20 / 43

Dostęp do bazy danych 1 Istnieją rozszerzenia pozwalające na połączenia z różnymi bazami danych 1 SQLite; 2 MySQL 3 PostgreSQL 4 MSSQL 5 Oracle 2 Do połączenia z bazą konieczne są dane użytkownika i hasło 3 PHP musi mieć uprawnienia do połączenia z bazą ze swojego serwera P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 21 / 43

Dostęp do bazy danych Połączenie i zapytanie <?php $link = mysql_connect( mysql_host, mysql_user, mysql_password ); mysql_select_db( my_database ); $query = SELECT * FROM my_table ; $result = mysql_query($query); P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 22 / 43

Dostęp do bazy danych c.d. Odczyt danych z tabeli echo <table>\n ; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo \t<tr>\n ; foreach ($line as $col_value) { echo \t\t<td>$col_value</td>\n ; } echo \t</tr>\n ; } echo </table>\n ; P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 23 / 43

Dostęp do bazy danych c.d. Zakończenie połączenia mysql_free_result($result); mysql_close($link);?> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 24 / 43

Dostęp do bazy danych c.d. Wygenerowany kod HTML <table> <tr> <td>1</td> <td>anna</td> <td>babacka</td> </tr> <tr> <td>2</td> <td>matylda</td> <td>babacka</td> </tr> <tr> <td>3</td> <td>tomasz</td> <td>cabacki</td> </tr> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 25 / 43

Dostęp do bazy danych c.d. Widok w przeglądarce 1 Anna Abacka 2 Matylda Babacka 3 Tomasz Cabacki P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 26 / 43

Formularze w HTML 1 Znacznik <form> 2 Elementy formularza - znaczniki <input> 3 Typ pola określany przez atrybut type 1 Pole tekstowe <input type= text > 2 Pole jednokrotnego wyboru (radio) <input type= radio > 3 Pole wielokrotnego zaznaczenia (checkbox) <input type= checkbox > 4 Pole hasła (nie wyświetla wpisywanych znaków) <input type= password > 5 Przycisk wysyłania <input type= submit > 6 Przycisk czyszczenia <input type= reset > P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 27 / 43

Przykładowy formularz Pytanie o imię, nazwisko i płeć <form> Imię: <input type= text name= imie /><br /> Nazwisko: <input type= text name= nazwisko /><br /> Płeć: <input type= radio name= plec value= M /> Mężczyzna<br /> <input type= radio name= sex value= K /> Kobieta <input type= submit value= Wyślij /> <input type= reset value= Wyczyść /> </form> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 28 / 43

Widok w przeglądarce P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 29 / 43

Co się dzieje z danymi? 1 Dane z formularza wysyłane są do serwera przy po kliknięciu w przycisk submit 2 Dwie metody 1 GET - dane zakodowane w adresie URL 2 POST - dane zapisane treści żądania do serwera 3 Konieczne jest podanie skryptu, który zajmie się danymi otrzymanymi przez serwer 4 Atrybut action 5 Ścieżka dostępu i nazwa pliku, który przetwarza dane P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 30 / 43

Wysyłanie danych metodą POST <form action= witaj.php method= POST > Imię: <input type= text name= imie /><br /> Nazwisko: <input type= text name= nazwisko /><br /> <input type= submit value= Wyślij /> </form> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 31 / 43

Dostęp do danych POST witaj.php <html> <head> </head> <body> <p>witaj <?php echo $_POST[ imie ];?>!</p> <p>twoje nazwisko to <?php echo $_POST[ nazwisko ];?>.</p> </body> </html> Widok w przeglądarce po wysłaniu Witaj Tomasz! Twoje nazwisko to Cabacki. P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 32 / 43

Wysyłanie danych metodą GET <form action= witaj.php method= GET > Imię: <input type= text name= imie /><br /> Wiek: <input type= text name= wiek /><br /> <input type= submit value= Wyślij /> </form> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 33 / 43

Widok w przeglądarce Adres URL wysłany do serwera http://mojastrona.com/witaj.php?imie=tomasz&wiek=32 P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 34 / 43

Dostęp do danych GET witaj.php <html> <head> </head> <body> <p>witaj <?php echo $_GET[ imie ];?>!</p> <p>masz <?php echo $_GET[ wiek ];?> lat.</p> </body> </html> Widok w przeglądarce po wysłaniu Witaj Tomasz! Masz 32 lat. P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 35 / 43

Kiedy POST a kiedy GET? 1 GET 2 POST 1 Efekt wielokrotnego wysłania tych samych danych jest taki sam jak efekt jednokrotnego wysłania 2 Brak efektów ubocznych, albo są one nieistotne 3 Mała ilość danych 4 Tylko przy pobieraniu danych z bazy 1 Wysłanie formularza powoduje dodatkowe efekty uboczne, które nie powinny być powtarzane 2 Duża ilość danych 3 Pobieranie, dodawanie, usuwanie danych z bazy P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 36 / 43

SQL injection ;) Rysunek : http://xkcd.com/327/ P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 37 / 43

Walidacja i zabezpieczenia 1 Po stronie klienta 1 JavaScript 2 Przed wysłaniem danych z formularza 3 Wyrażenia regularne - poprawność danych 4 Nie gwarantuje poprawności danych 5 Dla wygody użytkownika 2 Po stronie serwera 1 PHP,... 2 Po wysłaniu danych z formularza 3 Usuwanie niebezpiecznych znaków 4 Dodawanie \ przed i "(addslashes()) 5 Wykorzystanie funkcji dla używanej bazy (mysql_real_escape_string()) 6 Wyrażenia regularne - poprawność danych 7 Dla bezpieczeństwa P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 38 / 43

Alternatywy CGI Common Gateway Interface Programy napisane w dowolnym języku (np. C, najczęściej Perl) Dane o żądaniu HTTP w zmiennych środowiskowych Dane z POST i PUT na standardowym wejściu Zawartość generowana przez program na standardowe wyjście Przykład Perl #!/usr/bin/perl print "Content-type: text/plain\n\n"; for my $var ( sort keys %ENV ) { my $value = $ENV$var; $value =~ s/n/\n/g; $value =~ s/"/\"/g; print qq[$var="$value"\n]; } P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 39 / 43

Alternatywy CGI Request http://example.com/cgi-bin/printenv.pl/foo/bar?var1=value1& var2=with%20percent%20encoding Zmienne środowiskowe GATEWAY_INTERFACE="CGI/1.1" HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7" HTTP_ACCEPT_ENCODING="gzip, deflate" HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5" HTTP_CONNECTION="keep-alive" HTTP_HOST="example.com" HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/ PATH_INFO="/foo/bar" PATH_TRANSLATED="/var/www/foo/bar" QUERY_STRING="var1=value1&var2=with%20percent%20encoding" REMOTE_ADDR="127.0.0.1" REMOTE_PORT="63555" REQUEST_METHOD="GET" REQUEST_URI="/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding SCRIPT_FILENAME="/var/www/cgi-bin/printenv.pl" SCRIPT_NAME="/cgi-bin/printenv.pl" SERVER_ADDR="127.0.0.1" P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 40 / 43

Alternatywy Genshi <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/"> <head> <title>geddit: News</title> </head> <body class="index"> <div id="header"> <h1>news</h1> </div> <ol py:if="links"> <li py:for="link in reversed(links)"> <a href="$link.url">$link.title</a> posted by $link.username at $link.time.strftime( %x %X ) </li> </ol> <p><a class="action" href="/submit/">submit new link</a></p> <div id="footer"> <hr /><p class="legalese"> c 2007 Edgewall Software</p> </div> </body> </html> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 41 / 43

Alternatywy Genshi P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 42 / 43

Alternatywy Django {% extends "base.html" %} {% block title %}Articles for {{ year }}{% endblock %} {% block content %} <h1>articles for {{ year }}</h1> {% for article in article_list %} <p>{{ article.headline }}</p> <p>by {{ article.reporter.full_name }}</p> <p>published {{ article.pub_date date:"f j, Y" }}</p> {% endfor %} {% endblock %} <html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> <img src="sitelogo.gif" alt="logo" /> {% block content %}{% endblock %} </body> </html> P. Daniluk (Wydział Fizyki) BDiUS w. VIII Jesień 2013 43 / 43