Szkielety tworzenia aplikacji



Podobne dokumenty
Programowanie internetowe

Zrąb webowy dla perfekcjonistów z terminami. autor: Kamil Adamczyk

2 Podstawy tworzenia stron internetowych

Szkielety tworzenia aplikacji

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

STRONY INTERNETOWE mgr inż. Adrian Zapała

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Programowanie WEB PODSTAWY HTML

Programowanie w języku Python. Grażyna Koba

Bazy Danych i Usługi Sieciowe

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

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

Aplikacje internetowe

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

Przedmiot: Grafika komputerowa i projektowanie stron WWW

Backend Administratora

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

Kaskadowe arkusze stylów (CSS)

Dzięki arkuszom zewnętrznym uzyskujemy centralne sterowanie wyglądem serwisu. Zewnętrzny arkusz stylów to plik tekstowy z rozszerzeniem css.

rk HTML 4 a 5 różnice

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

HTML (HyperText Markup Language) hipertekstowy język znaczników

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Język Python. Język Python 1/35

Quiz Aplikacja internetowa

Podstawy JavaScript ćwiczenia

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Bazy danych i strony WWW

REFERAT O PRACY DYPLOMOWEJ

Zaawansowany kurs języka Python

Umieszczanie kodu. kod skryptu

O stronach www, html itp..

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

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

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Podstawy (X)HTML i CSS

Zaawansowana Pracownia Komputerowa - Ćwiczenia. Krzysztof Miernik

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Modele danych walidacja widoki zorientowane na model

Laboratorium Kierunki Rozwoju oprogramowania REST, Django

Programowanie obiektowe

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

Pierwsza strona internetowa

Programowanie MorphX Ax

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Laboratorium 6 Tworzenie bloga w Zend Framework

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Podstawy technologii WWW

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

I. Dlaczego standardy kodowania mailingów są istotne?

Python. Skąd taka nazwa? Kurs systemu UNIX 1

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, O STRUKTURZE PRZEDMIOTOWEJ

Danuta ROZPŁOCH-NOWAKOWSKA Strona Moduł 4. Przykład 1. Przykład 2. HTML 4.01 Transitional).

Programowanie i projektowanie obiektowe

Wstęp do programowania

WYMAGANIA EDUKACYJNE. Witryny i Aplikacje Internetowe klasa I

1. Zaczynamy! (9) 2. Edycja dokumentów (33)

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Elementarz HTML i CSS

Kurs rozszerzony języka Python

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Język Python (2) Język Python (2) 1/36

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Wymagania edukacyjne: Statyczne witryny internetowe (na podstawie programu nr )

Przewodnik użytkownika (instrukcja) AutoMagicTest

PROGRAMOWANIE. WNPiD UAM, Programowanie, inż. Piotr Jabłoński

Viatoll Calc v1.3. Viatoll Calc. Instrukcja użytkownika. Strona 1

Typy danych, cd. Łańcuchy znaków

ABC języka HTML i XHTML / Maria Sokół. wyd. 2. Gliwice, cop Spis treści

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Tworzenie Stron Internetowych. odcinek 6

Szczegółowy opis zamówienia:

Program szkolenia: Symfony, nowoczesny framework PHP

Java jako język programowania

Wybrane działy Informatyki Stosowanej

Wstęp do programowania

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

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

Programowanie obiektowe

PHP: bloki kodu, tablice, obiekty i formularze

Podstawy programowania skrót z wykładów:

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Wykład 03 JavaScript. Michał Drabik

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

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

Zasady programowania Dokumentacja

Podstawy technologii WWW

Plan. Stan sesji (1/2) Stan sesji (2/2) Stan sesji Tworzenie przycisku Integracja prostego formularza z raportem Tworzenie formularza z raportem

Transkrypt:

Szkielety tworzenia aplikacji dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska 2015/2016

Kwestie organizacyjne Kontakt: mail: andrzej.grosser@icis.pcz.pl strona: http://icis.pcz.pl/~agrosser konsultacje: pokój 116 (w budynku wydziału), po wcześniejszym umówieniu drogą mailową Szkielety tworzenia aplikacji 2

Plan przedmiotu Wprowadzenie do technologii szkieletowych. Django instalacja i konfiguracja założenia projektowe model - ORM podstawy tworzenia stron - widok kontroler dopracowywanie modelu testy administrator, użytkownik - wprowadzenie ról web services Qt Szkielety tworzenia aplikacji 3

Budowanie aplikacji Szkielety tworzenia aplikacji 4

MVC Model-View-Controller wzorzec projektowy wykorzystywany w inżynierii oprogramowania, izolujący logikę biznesową od warstwy prezentacji danych, wspierajacy niezależne projektowanie, realizację i testowanie poszczególnych elementów aplikacji. Szkielety tworzenia aplikacji 5

Klocki górą logika aplikacji Szkielety tworzenia aplikacji 6

Klocki górą logika aplikacji interfejs użytkownika Szkielety tworzenia aplikacji 7

Klocki górą logika interfejs zarządzanie, aplikacji użytkownika komunikacja Szkielety tworzenia aplikacji 8

Model logika biznesowa - model składowania danych warstwa samodzielna zmiany w strukturze danych nie wpływają na pozostałe części aplikacji przenośny typy: aktywny i pasywny Szkielety tworzenia aplikacji 9

Widok logika prezentacji - interfejs użytkownika referencje do danych różnorodność technologii (XHTML, PHP, XML, PDF, FLASH, RSS, SOAP itd) pobiera, pokazuje, ale nie modyfikuje danych łatwa rozbudowa Szkielety tworzenia aplikacji 10

Kontroler komunikacja może zmieniać stan modelu odświeża widok przełącza sterowanie Szkielety tworzenia aplikacji 11

Zastosowanie duże projekty przewidziana ciągła ewolucja aplikacji i stosowanych w niej technologii duży zespół realizujący aplikację możliwość wykorzystania części projektu w innych realizacjach Oracle ADF, Java Swing, Spring Framework, Ruby on Rails, Django, Symfony i wiele innych Szkielety tworzenia aplikacji 12

Odmiany Model-View-Presenter Presentation-Abstraction-Control Hierarchical Model-View-Controller Pasywny widok Szkielety tworzenia aplikacji 13

Szkielety aplikacji Szkielety tworzenia aplikacji 14

Szkielety aplikacji Framework - szkielet budowy aplikacji. Definiuje strukturę aplikacji oraz ogólny mechanizm jej działania, dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia do wykonywania określonych zadań. Szkielety tworzenia aplikacji 15

Cechy gotowy szkielet narzucony przepływ sterowania domyślna konfiguracja komponenty do rozbudowy zdefiniowana i zamknięta struktura wewnętrzna Szkielety tworzenia aplikacji 16

Zalety i wady szybka realizacja projektu poprawa jakości kodu większa niezawodność wsparcie twórców frameworku Szkielety tworzenia aplikacji 17

Zalety i wady szybka realizacja projektu poprawa jakości kodu większa niezawodność wsparcie twórców frameworku złożoność niższa wydajność koszt szkoleń Szkielety tworzenia aplikacji 18

Django Django - wysokopoziomowy, framework przeznaczony do tworzenia aplikacji internetowych, napisany w Pythonie. nazwę wymawiamy dżango nazwa pochodzi od imienia gitarzysty Django Reinhardta Powstał pod koniec 2003 roku jako ewolucyjne rozwinięcie aplikacji internetowych, tworzonych przez grupę programistów związanych z Lawrence Journal-World W 2005 roku kod Django został wydany na licencji BSD Django opiera się na wzorcu projektowym Model-View-Template Szkielety tworzenia aplikacji 19

Cechy Django I Automatycznie generowany i kompletny panel administracyjny, z możliwością dalszego dostosowywania Przyjazne adresy dokumentów z możliwością dowolnego ich kształtowania Prosty lecz funkcjonalny system szablonów czytelny zarówno dla grafików jak i dla programistów Oddzielenie logiki aplikacji (widok) logiki biznesowej (model) wyglądu (szablony) oraz baz danych Wsparcie dla wielojęzycznych aplikacji Bardzo duża skalowalność i wydajność pod obciążeniem Wydajne systemy cache owania, obsługa Memcached Własny, prosty serwer do testowania aplikacji Szkielety tworzenia aplikacji 20

Cechy Django II Współpracuje z Apache poprzez WSGI (domyślnie) i mod python oraz z innymi serwerami poprzez protokoły FastCGI i SCGI DRY czyli zasada nie powtarzaj się w odniesieniu do tworzenia aplikacji, (np. strukturę bazy danych Django generuje ze zwykłych klas Pythona) Posiada ORM wysokiego poziomu pozwalający na łatwe i bezpieczne operowania na bazach danych bez użycia SQL Obsługuje następujące bazy danych: PostgreSQL, MySQL, SQLite oraz Oracle Rozpowszechniany jest na licencji BSD Szkielety tworzenia aplikacji 21

Architektura MVT Model - opisuje strukturę danych, dotyczy schematu bazy danych View - kontroluje jakie dane mają dotrzeć do użytkownika Template - opisuje jak dane będą prezentowane Controler - dla Django nadzoruje parsowaniem url Szkielety tworzenia aplikacji 22

Architektura Django Szkielety tworzenia aplikacji 23

Moduły Django Interface administracyjny (CRUD interface) System uwierzytelniania System komentarzy Moduł wsparcia formularzy Obsługa sesji Obsługa cache owania Moduł internacjonalizacji Moduł lokalizacji itd... Szkielety tworzenia aplikacji 24

Kroki tworzenia aplikacji zaprojektuj aplikację, zainstaluj niezbędne składniki, zdefiniuj ustawienia bazy Settings.py, zdefiniuj model, dodaj niezbędne moduły, napisz szablony, zdefiniuj warstwę widoku, zdefiniuj mapowanie url, testuj aplikację, wdróż ją. Szkielety tworzenia aplikacji 25

Instalacja I Instalacja Pythona - http://www.python.org Instalacja Apache i mod_pythona Instalacja SZBD: PostgreSQL, MySQL, Oracle lub SQLite Instalacja sterowników bazy danych PostgreSQL - pakiet psycopg MySQL - MySQLdb SQLite - pysqlite Oracle - cx_oracle Zapewnienie uprawnień do tworzenia i modyfikowania tabel w bazie danych Usunięcie starych wersji Django Instalacja kodu Django Instalacja z paczek dla określonych dystrybucji Instalacja oficjalnego wydania http://www.djangoproject.com/download/ Szkielety tworzenia aplikacji 26

Instalacja II Instalacja wersji rozwojowej svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk Test poprawności instalacji (np.: import modułu django): >>> import django >>> django.version (1, 1, 0, alpha, 0) Szkielety tworzenia aplikacji 27

Tworzenie projektu Projekt to zestaw ustawień dla instancji Django zawierający konfigurację bazy danych, opcje specyficzne dla Django oraz ustawienia specyficzne dla aplikacji. Tworzenie katalogu projektu (nie jest zalecane tworzenie go w /var/www), Przejście do katalogu projektu Wygenerowanie projektu django-admin.py startproject pracuj Szkielety tworzenia aplikacji 28

Tworzenie projektu I Katalog pracuj zawiera cztery pliki: manage.py pracuj/ init.py settings.py urls.py init.py - plik wymagany przez Pythona, manage.py - narzędzie wiersza poleceń, które umożliwia interakcję z projektem Django na wiele sposób (python manage.py help), settings.py - ustawienia i konfiguracja dla projektu Django, urls.py - główny plik odwzorowania adresów URL dla projektu. Szkielety tworzenia aplikacji 29

Tworzenie aplikacji I Aplikacja jest tworzona poleceniem: python manage.py startapp aplikacja Po utworzeniu w katalogu nadrzędnym projektu pojawi się katalog aplikacji zawierający cztery pliki: init.py - katalog ma być traktowany jako pakiet, admin.py - dostosowanie interfejsu administratora, models.py - modele, tests.py - testy, views.py - widoki. Szkielety tworzenia aplikacji 30

Tworzenie projektu I Uruchomienie serwera deweloperskiego python manage.py runserver Pod adresem http://127.0.0.1:8000/ strona powitalna projektu Szkielety tworzenia aplikacji 31

Pierwsza strona w Django I Realizacja widoku: tworzenie pliku o nazwie views.py o zawartości: from django.http import HttpResponse def hello(request): return HttpResponse("Witaj, świecie!") Widok jest zwykłą funkcją Pythona, która jako pierwszy parametr przyjmuje obiekt HttpRequest, a jako odpowiedź zwraca obiekt HttpResponse. Szkielety tworzenia aplikacji 32

Pierwsza strona w Django II edycja pliku urls.py, który domyslnie zawiera: from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns(, # Example: # (r ^mysite/, include( mysite.foo.urls )), # Uncomment the admin/doc line below and add django.contrib.admindocs # to INSTALLED_APPS to enable admin documentation: # (r ^admin/doc/, include( django.contrib.admindocs.urls )), ) # Uncomment the next line to enable the admin: # (r ^admin/(.*), admin.site.root), Szkielety tworzenia aplikacji 33

Pierwsza strona w Django III from django.conf.urls.defaults import * from pracuj.views import hello urlpatterns = patterns(, #... ( ^hello/$, hello), ) adres http://127.0.0.1:8000/hello/ Szkielety tworzenia aplikacji 34

Schemat działania I Przychodzi żądanie dotyczące /hello/. Django określa główny plik URLconf, analizując zawartość zmiennej ROOT_URLCONF. Django przegląda wszystkie wzorce URL z pliku URLconf w poszukiwaniu pierwszego pasującego do /hello/. Jeśli znajdzie dopasowanie, wywołuje powiązaną z nim funkcję widoku. Funkcja widoku zwraca HttpResponse. Django konwertuje HttpResponse na odpowiednią odpowiedź HTTP zawierająca stronę WWW. Szkielety tworzenia aplikacji 35

Python - wprowadzenie Python: Dynamiczny, obiektowy język programowania ogólnego przeznaczenia Został stworzony w 1990 przez Guido van Rossuma jako następca języka ABC Nazwa pochodzi od serii komediowej - Latający Cyrk Monty Pythona Dwie znacząco się różniące wersje: 3.x, 2.x Najważniejsze implementacje: CPython Jython IronPython PyPy Szkielety tworzenia aplikacji 36

Cechy Pythona I Najważniejsze cechy Pythona: czysta, łatwa do czytania składnia, możliwość introspekcji, intuicyjne programowanie obiektowe, naturalny sposób wyrażania kodu proceduralnego, automatyczne zarządzanie pamięcią, pełna modułowość, wsparcie dla hierarchicznych pakietów, typy danych wysokiego poziomu, oparty na wyjątkach system obsługi błędów, Szkielety tworzenia aplikacji 37

Cechy Pythona II rozległa biblioteka standardowa, wiele dodatkowych bibliotek zewnętrznych obejmujących większość dziedzin zastosowań, moduły i rozszerzenia mogą być łatwo zapisywane w C, C++ (lub Javie dla Jythona, językach.net dla IronPython), przenośny na różne platformy systemowe - Windows, Linux/Unix, Mac, możliwość osadzenia w aplikacjach jako języka skryptowego. Szkielety tworzenia aplikacji 38

Interpreter Pythona Uruchamianie trybu interaktywnego: python Powoduje to przejście do: Python 2.7.2 (default, Jan 31 2012, 13:19:49) [GCC 4.6.2 20120120 (prerelease)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Uruchamianie skryptu: python nazwa_skryptu.py Powoduje to kompilację i uruchomienie skryptu. Powstają plik z bajtkodem maszyny wirtualnej Pythona *.pyc Szkielety tworzenia aplikacji 39

Podział aplikacji Pythona 1 Programy składają się z modułów (może być jeden) 2 Moduły zawierają instrukcje 3 Instrukcje są zbudowane z wyrażeń 4 Wyrażenia tworzą i przetwarzają obiekty Szkielety tworzenia aplikacji 40

Zmienne I Nie określa się jawnie typu zmiennej - wnioskowanie o typie na podstawie prawej strony operatora przypisania. Każda zmienna musi być zdefiniowana x = 4 s t r = " Ala ma kota " Brak przypisania wartości do zmiennej skutkuje błędem >>> h Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name h is not defined Szkielety tworzenia aplikacji 41

Zmienne II Można łączyć definicje zmiennych: x = y = z = 0 Zmienne można redefiniować, ponowne przypisanie nie musi być do tego samego typu: x = 4 x = "As" Szkielety tworzenia aplikacji 42

Podstawowe typy danych Najważniejsze typy danych Pythona: liczby typ logiczny łańcuchy znaków listy krotki zbiory słowniki Szkielety tworzenia aplikacji 43

Liczby i typ logiczny Typ Literał Zmienna Całkowity 1 x = 4 Rzeczywisty 1.0 y = 2.0 Zespolony 3+1j com = 2+2J Logiczny True b = False width = 20 h e i g h t = 45 width h e i g h t 2 100 3 3. 7 5 / 1. 5 9. 0 / 2 1 j 1J 1 j complex ( 0, 1 ) a =1.5+0.5 j a. r e a l a. imag Szkielety tworzenia aplikacji 44

Łańcuchy znaków I Łańcuchy znaków Pythona Przechowują dane tekstowe Można je definiować: L = " Mielonka " s t r L = Golonka n a p i s 1 = " Bardzo d ł u g i n a p i s obejmuj ą cy w i e l e \n\ w i e r s z y t e k s t u t r z e b a j a w n i e dodawa ć \n\ z n a k i p r z e j ś c i a do nowego w i e r s z a " n a p i s 2 = """ Bardzo d ł u g i n a p i s a obejmuj ą cy w i e l e w i e r s z y t e k s t u n i e t r z e b a j a w n i e dodawa ć znak ów p r z e j ś c i a do nowego w i e r s z a """ Szkielety tworzenia aplikacji 45

Łańcuchy znaków II Łańcuchy znaków są indeksowane od zera p r i n t ( s t r L [ 0 ] ) Obliczanie długości łańcucha znaków p r i n t ( l e n ( s t r L ) ) Odwoływanie się do wartości od końca: p r i n t ( s t r L [ l e n ( s t r L ) 1]) p r i n t ( s t r L [ 1]) Wycinki #Wycina pod ł ań cuch od 3 znaku a ż do ko ń ca p r i n t ( s t r L [ 2 : l e n ( s t r L ) ] ) p r i n t ( s t r L [ 2 : ] ) Szkielety tworzenia aplikacji 46

Łańcuchy znaków III Operacja konkatenacji wynik = s t r L + L Mnożenie łańcuchów: wynik = 3 s t r L Łańcuchy znaków są niezmienne - nie można zmienić wartości znaków składowych. Próba przypisania: s t r L [ 0 ] = "M" Zakończy się błędem: Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: str object does not support item assignment Szkielety tworzenia aplikacji 47

Łańcuchy znaków IV Operacje możliwe do wykonania na łańcuchach znaków: s t r L. f i n d ( Go ) s t r L. r e p l a c e ( Go, Mie ) n a p i s = " kot, p i e s, rybka " ) n a p i s. s p l i t (, ) "%s %s " % ( " Golonka ", " Mielonka " ) #Wersja >= 2. 6 " {0} {1} ". format ( " Golonka ", " Mielonka " ) Szkielety tworzenia aplikacji 48

Listy I Listy są uporządkowaną kolekcją elementów, elementy umieszcza się pomiędzy parą nawiasów kwadratowych [] l s t = [ 1, 2, 3 ] Długość listy: l e n ( l s t ) Nie muszą zawierać elementów tego samego typu, mogą nawet zawierać listy zagnieżdżone: l s t 2 = [ 1, "Kot", 3. 0 ] l s t 3 = [ [ 1, "Kot" ], 3. 0 ] Konkatenacja lista l s t 2 + l s t 3 Szkielety tworzenia aplikacji 49

Listy II Podobnie jak dla łańcuchów znaków mogą być robione wycinki z list: l s t 2 [ 1 : ] l s t 2 [ 1 : 2 ] l s t [ : 1 ] Można zmieniać elementy listy (inaczej niż dla łańcuchów znaków): l s t 2 [ 0 ] = 2 Operacje specyficzne dla list l s t 1. append ( [ 1, 2, 3 ] ) l s t 1. pop ( 1 ) d e l l s t 1 [ 1 ] Szkielety tworzenia aplikacji 50

Listy III Sprawdzanie zakresów indeksów - przekroczenie zakresu indeksów skutkuje błędem l s t 1 [ 1 0 ] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range Wyrażenia listowe (ang. list comprehension) l s t 4 = [ element 2 f o r element i n [ 1, 2, 3 ] ] Szkielety tworzenia aplikacji 51

Krotki I Krotki są niezmienną sekwencją elementów (nie da się zmieniać wartości elementów składowych krotki po jej utworzeniu). Używane najczęściej w sytuacji, gdy nie powinno się zmieniać elementów zawartych w kolekcji. Kolejne elementy krotki rozdziela się przecinkami: t = 12345, 6789, w i t a j! Krotki można zagnieżdżać: u = t, ( 1, 2, 3, 4, 5) Szkielety tworzenia aplikacji 52

Krotki II Liczba elementów w krotce l e n ( t ) Odwołanie do elementów za pomocą indeksów, możliwe jest również robienie wycinków z krotek: t [ 0 ] t [ 1 : 3 ] Rozpakowanie krotki x, y, z = t Szkielety tworzenia aplikacji 53

Zbiory I Zbiory są nieuporządkowaną kolekcją bez powtórzeń: #l s t l i s t a, zb z b i ó r l s t = [ " kot ", " p i e s ", " kanarek ", " kot ", " kura ",\ " p i e s ", " kot " ] zb = s e t ( l s t ) Sprawdzanie przynależności do zbioru: " kanarek " i n zb " skowronek " i n zb Szkielety tworzenia aplikacji 54

Zbiory II Operacje na zbiorach: a = s e t ( a b c d e f ) b = s e t ( abcmz ) #Ró ż n i c a z b i o r ów a b #Suma z b i o r ów a b #Czę ś ć wspó l n a a & b #Ró ż n i c a s y m e t r y c z n a a ^ b Szkielety tworzenia aplikacji 55

Słowniki I Słowniki są kontenerem przechowującym pary klucz - wartość. Kolejne rozdzielane przecinkami pary są zapisane pomiędzy nawiasami klamrowymi t e l e f o n y = { Alek : 1 2 3 4 5, Tadek :11111} Odwołanie do wartości pod kluczem: t e l e f o n y [ Alek ] Przypisanie wartości do nieistniejącego klucza powoduje dodanie nowej pary: t e l e f o n y [ Robert ] = 122222 Przejście po elementach słownika: f o r naz, nr i n t e l e f o n y. i t e r i t e m s ( ) : p r i n t ( naz, nr ) Szkielety tworzenia aplikacji 56

Słowniki II Wybór listy kluczy ze słownika: t e l e f o n y. k e y s ( ) Wybór listy wartości ze słownika: t e l e f o n y. v a l u e s ( ) Sprawdzenie czy klucz o podanej wartości istnieje w słowniku: Adam i n t e l e f o n y Szkielety tworzenia aplikacji 57

Pliki I Python dostarcza operacji dla plików Zapis danych do pliku: f = open ( dane. t x t, w ) f. w r i t e ( Napis ) f. c l o s e ( ) Odczyt danych z pliku: f = open ( dane. t x t ) c a l y P l i k = f. r e a d ( ) f. c l o s e ( ) Szkielety tworzenia aplikacji 58

Instrukcje I Zbiór instrukcji Pythona: Instrukcja przypisania Wywołanie funkcji Instrukcja print Instrukcja if/elsif/else Instrukcja for Instrukcja while/else Instrukcja pusta pass Instrukcja break Instrukcja continue Definicja funkcji def Szkielety tworzenia aplikacji 59

Instrukcje II Definicja klasy class Instrukcja powrotu z funkcji return Dostęp do modułu import Dostęp do składowych modułu from Wychwytywanie wyjątków try/except/finally Zgłaszanie wyjątków raise Dostęp do zmiennych globalnych/modułowych global Tworzenie generatorów yield Usunięcie nazwy del Szkielety tworzenia aplikacji 60

Instrukcja warunkowa if I Ogólna postać (frazy elif, else są opcjonalne): i f e x p r e s s i o n 1 : s t a t e m e n t ( s ) e l i f e x p r e s s i o n 2 : s t a t e m e n t ( s ) e l i f e x p r e s s i o n 3 : s t a t e m e n t ( s ) e l s e : s t a t e m e n t ( s ) Szkielety tworzenia aplikacji 61

Instrukcja warunkowa if II Przykład: i f x < 0 : p r i n t ( "X m n i e j s z e od z e r a " ) e l i f x == 0 : p r i n t ( "X r ówne z e r o " ) e l s e : p r i n t ( "X wi ę k s z e od z e r a " ) Szkielety tworzenia aplikacji 62

Instrukcja pętli for Ogólna postać: f o r i t e r a t i n g _ v a r i n sequence : s t a t e m e n t s ( s ) Przykład: l s t = [ " eggs ", "spam", 120, 1 2 4] f o r elem i n l s t : p r i n t ( elem ) f o r i i n range ( 0, l e n ( l s t ) ) : p r i n t ( l s t [ i ] ) Szkielety tworzenia aplikacji 63

Instrukcja pętli while Postać ogólna, pętla jest wykonywana dopóki wyrażenie ma wartość logiczną prawdy: w h i l e e x p r e s s i o n : s t a t e m e n t ( s ) Przykład: l i c z n i k = 0 w h i l e l i c z n i k < 1 0 : l i c z n i k += 1 Szkielety tworzenia aplikacji 64

Instrukcje break, else, continue i pass I break przerywa wykonywanie bieżącej iteracji, wykonanie instrukcji pętli zostaje przerwane f o r n i n range ( 2, 10) : f o r x i n range ( 2, n ) : i f n % x == 0 : p r i n t n, r ówne, x,, n/x break e l s e : p r i n t n, j e s t l i c z b ą p i e r w s z ą continue przerywa wykonywanie bieżącej iteracji, następuje przejście do kolejnej iteracji Szkielety tworzenia aplikacji 65

Instrukcje break, else, continue i pass II else jest wykonywane na zakończenie pętli, nie jest wykonywane w sytuacji, gdy pętla została przerwana instrukcją break pass jest odpowiednikiem instrukcji pustej z C++ w h i l e True : pass Szkielety tworzenia aplikacji 66

Funkcje Funkcje umożliwiają grupowanie instrukcji w większą całość Ogólna postać d e f nazwa ( l i s t a A r g ) : i n s t u k c j e Argumenty mogą mieć wartość domyślną Wartości zwracane przez funkcję mogą być różnych typów Możliwe jest definiowanie funkcji wewnątrz funkcji Cechą charakterystyczną wsparcie dla wywołań polimorficznych i duck typing Szkielety tworzenia aplikacji 67

Definiowanie funkcji d e f s i l n i a ( n ) : """ Funkcja o b l i c z a j ą ca s i l n i ę """ wynik = 1 f o r i i n range ( 1, n+1) : wynik = i r e t u r n wynik p r i n t ( s i l n i a ( 5 ) ) p r i n t ( s i l n i a. doc ) p r i n t ( d i r ( s i l n i a ) ) Szkielety tworzenia aplikacji 68

Argumenty funkcji Argumenty funkcji są traktowane jako zmienne lokalne, dlatego zmiany ograniczają się tylko do funkcji Wyjątkiem od zapisanej zasady są obiekty, których zawartość może być zmieniana - listy, słowniki, obiekty klas d e f zmianalubnie ( a, b, c ) : a = 4 b [ 0 ] = x c. a = 14 b = 4 c = 4 l i c z b a = 0 l i s t a = [ 1, 2, 3 ] o b i e k t = P r o s t o k a t ( 0 ) zmianalubnie ( l i c z b a, l i s t a, o b i e k t ) p r i n t l i c z b a, l i s t a, o b i e k t. a Szkielety tworzenia aplikacji 69

Argumenty domyślne i nazwane funkcji d e f argdomyslne ( a = 1, b = 2, c = 3) : p r i n t "a : { 0 } b : { 1 } c : { 2 } ". format ( a, b, c ) argdomyslne ( 4, 6, 8 ) argdomyslne ( 4, 6 ) argdomyslne ( 4 ) argdomyslne ( ) argdomyslne ( a = 4) argdomyslne ( c = 8) argdomyslne ( c = 8, b = 4, a = 2) Szkielety tworzenia aplikacji 70

Argumenty *args i **kwargs I Są używane dla funkcji, które przyjmują nieznaną na początku liczbę argumentów W przypadku *args - są zbierane argumenty z kolejnych pozycji i wstawiane do krotki args d e f f 1 ( a r g s ) : p r i n t a r g s f 1 ( 1, 2, 3, 4, 5 ) W przypadku **kwargs tworzony jest słownik łączący kolejne nazwy z wartościami argumentów d e f f 2 ( kwargs ) : p r i n t kwargs f 2 ( a = 1, b = 2, c = 3) Szkielety tworzenia aplikacji 71

Argumenty *args i **kwargs II d e f f 2 ( kwargs ) : p r i n t kwargs f 2 ( a = 1, b = 2, c = 3) Możliwe jest łączenie obu konwencji d e f f 3 ( args, kwargs ) : p r i n t args, kwargs f 3 ( 1, 2, a = 1, b = 2) Nie można jednak zamieniać argumentów. Poniższa linia jest błędna: f 3 ( a = 1, b = 2, 1, 2) Szkielety tworzenia aplikacji 72

Klasy i obiekty c l a s s P r o s t o k a t : zmienna = 12 d e f init ( s e l f, a ) : s e l f. a = a d e f p o l e ( s e l f ) : r e t u r n s e l f. a s e l f. a p = P r o s t o k a t ( 2 ) p r i n t p. a Szkielety tworzenia aplikacji 73

Atrybuty #a t r y b u t klasowy p r i n t P r o s t o k a t. zmienna p. nowazmienna = 18 p. zmienna = 1000 #to n i e j e s t a t r y b u t klasowy # tworzone j e s t p o l e o b i e k t u! p r i n t p. zmienna #Odwo ł a n i e do z m i e n n e j k l a s o w e j p r i n t P r o s t o k a t. zmienna Szkielety tworzenia aplikacji 74

Metody Metody mogą być wywoływane za pośrednictwem obiektu: p. p o l e ( ) Można również przekazywać obiekt jako do metod klas jako pierwszy argument wywołania: P r o s t o k a t. p o l e ( p ) Szkielety tworzenia aplikacji 75

Metody specjalne I Są to metody, których nazwa zaczyna się i kończy (dwoma podkreśleniami). Służą do celów specjalnych np: inicjowania, definicji operatorów, konwersji typów, reprezentacji obiektów klasy w innej postaci (np. łańcuchów tekstowych) Szkielety tworzenia aplikacji 76

Metody specjalne II c l a s s A : d e f init ( s e l f, a ) : s e l f. a = a d e f repr ( s e l f ) : r e t u r n A({0}). format ( s e l f. a ) d e f str ( s e l f ) : r e t u r n Klasa A z a={0}. format ( s e l f. a ) a = A( 1 2 ) # Odwrotne a p o s t r o f y pod t y l d ą p r i n t a p r i n t r e p r ( a ) p r i n t s t r ( a ) Szkielety tworzenia aplikacji 77

Dziedziczenie c l a s s Super : d e f init ( s e l f, x ) : s e l f. zmiennasuper = x c l a s s Sub ( Super ) : d e f init ( s e l f, x, y ) : Super. init ( s e l f, x ) s e l f. zmiennasub = y s = Sub ( 1, 2) p r i n t s. zmiennasuper, s. zmiennasub Szkielety tworzenia aplikacji 78

Duck typing c l a s s Kaczka : d e f kwacz ( s e l f ) : p r i n t "Kwaaaa" c l a s s Wabik : d e f kwacz ( s e l f ) : p r i n t " F i i i i " d e f kwakanie ( o b i e k t ) : o b i e k t. kwacz ( ) k = Kaczka ( ) w = Wabik ( ) kwakanie ( k ) kwakanie (w) Szkielety tworzenia aplikacji 79

Moduły I Ułatwiają ponowne używanie kodu, mogą zawierać zmienne i funkcje. Pozwalają na podział nazw w celu uniknięcia ich konfliktów. Umożliwiają współdzielenie danych. Zakres modułu pokrywa się z zakresem pliku. Kolejne instrukcje są wykonywane tylko raz przy załadowaniu modułu. Zawartość modułu można przetwarzać za pomocą dwóch instrukcji i funkcja: Instrukcja import - umożliwia klientowi korzystanie z modułu jako całości, dostęp do składowych przez kropkę import os os. name Szkielety tworzenia aplikacji 80

Moduły II Instrukcja from - umożliwia w kodzie klienckim korzystanie z wyszczególnionych nazw bezpośrednio from s y s import v e r s i o n _ i n f o v e r s i o n _ i n f o ( ) Funkcja reload z modułu imp (imp.reload) - umożliwia ponowne wczytanie modułu import j a k i s m o d u l import imp imp. r e l o a d ( j a k i s m o d u l ) Szkielety tworzenia aplikacji 81

Moduły III #mojmodul. py #c o d i n g=u t f 8 x = 10 p r i n t ( "Wywoł ywane wewną t r z modu ł u" ) p r i n t ( x ) d e f f u n k c j a ( ) : p r i n t ( " f u n k c j a " ) p r i n t ( "Wywoł ywane wewną t r z modu ł u" ) f u n k c j a ( ) i f name == " main " : p r i n t " Uruchomiony j a k o g ł ówny s k r y p t " #k l i e n t. py import mojmodul mojmodul. f u n k c j a ( ) import imp imp. r e l o a d ( mojmodul ) Szkielety tworzenia aplikacji 82

Pakiety Moduły można organizować w hierarchiczne struktury, dane są zorganizowane w strukturach katalogowych. import k a t a l o g 1. k a t a l o g 2. nazwamodulu Moduł jest traktowany jako pakiet, gdy zawiera plik init.py. Każdy katalog z pakietu musi zawierać ten plik. Szkielety tworzenia aplikacji 83

Wyjątki w h i l e True : t r y : l i c z b a = i n t ( raw_input ( "Wprowadź l i c z b ę : " ) ) break except V a l u e E r r o r : p r i n t "To n i e j e s t poprawna l i c z b a! " Szkielety tworzenia aplikacji 84

Własne typy wyjątków Można tworzyć własne typy wyjątków Klasy wyjątków powinny w bezpośredni lub pośredni sposób dziedziczyć po klasie Exception c l a s s MojWyjatek ( E x c e p t i o n ) : d e f init ( s e l f, w a r t o s c ) : s e l f. w a r t o s c = w a r t o s c d e f str ( s e l f ) : r e t u r n r e p r ( s e l f. w a r t o s c ) t r y : r a i s e MojWyjatek (2 2) except MojWyjatek as e : p r i n t e. w a r t o s c Szkielety tworzenia aplikacji 85

HTML HTML - Hyper Text Markup Language język opisu struktury strony, a nie jej wyglądu język znaczników, a nie język programowania zawiera bogaty zbiór znaczników opisujących elementy strony: nagłówki, akapity, listy i tabele. przeglądarka poprawnie interpretuje narzucony styl elementu, dzięki znacznikom w jakich został on osadzony Szkielety tworzenia aplikacji 86

Historia HTML 1980: fizyk Tim Berners-Lee (CERN) zaproponował ENQUIRE, do roku 1990 opracował HTML 1993: draft opublikowany przez IETF (Internet Engineering Task Force) 1995: HTML 2.0 Styczeń 1997: HTML 3.2 (rekomendacja W3C (World Wide Web Consortium)) Grudzień 1997: HTML 4.0 (rekomendacja W3C) (Strict, Transitional, Frameset) 1999: HTML 4.01 (rekomendacja W3C) zawieszenie HTML, prace nad XHTML 2008: working draft HTML5 (prace miały potrwać do 2022) Październik 2014: HTML 5.0 Szkielety tworzenia aplikacji 87

HTML/XHTML - zasady znaczniki - słowa kluczowe zawarte w nawiasach kątowych np.: <table> znaczniki mogą posiadać atrybuty, których wartości zawarte są w apostrofach lub w cudzysłowie np: src="przyk.gif" większość znaczników wymaga zamknięcia, np.: <h5>tekst</h5> znaczniki niepuste zawsze mają znacznik końcowy, np.: <p>dowolny tekst</p> znaczniki puste (logiczne) muszą być zakończone znakiem />, np.: <br /> wszystkie słowa kluczowe: nazwy znaczników i atrybutów, powinny być pisane małymi literami, np.: <img src="przyk.gif" /> pliki mogą nosić rozszerzenie.html lub.htm Szkielety tworzenia aplikacji 88

Struktura pliku <html> <!-- otwarcie strony--> <head> <!-- nagłówek strony--> <title>tytuł strony</title> <meta charset=utf-8" /> </head> <body> <!-- ciało strony--> <p>właściwa zawartość...</p> </body> </html> <!-- zamknięcie strony--> Szkielety tworzenia aplikacji 89

Nowe znaczniki HTML5 Najważniejsze nowe znaczniki: header - nagłówek footer - stopka nav - pasek nawigacyjny aside - pasek boczny section - grupowanie powiązanych ze sobą treści article - samodzielna treść figure - pozwala powiązać element z podpisem Szkielety tworzenia aplikacji 90

Struktura pliku HTML5 I <!DOCTYPE html> <html> <head> <title>tytuł</title> <meta charset="utf-8"/> </head> <body> <header> <h1>nagłówek</h1> </header> Szkielety tworzenia aplikacji 91

Struktura pliku HTML5 II <nav> <ul> <li><a href="#">odnośnik1</a></li> <li><a href="#">odnośnik2</a></li> </ul> </nav> <section> <article> <header> <h1><a href="#">tytuł 1</a></h1> </header> <section> <p>przykładowy wpis</p> </section> </article> </section> Szkielety tworzenia aplikacji 92

Struktura pliku HTML5 III <aside> <h2>odnośniki:</h2> <ul> <li><a href="#">odnośnik1</a></li> </ul> </aside> <footer> <p>struktura HTML5</p> </footer> </body> </html> Szkielety tworzenia aplikacji 93

Podstawowe znaczniki I nagłówki <h1>nagłówek 1</h1>, <h2>nagłówek 2</h2>, <h3>nagłówek 3</h3>, <h4>nagłówek 4</h4>, <h5>nagłówek 5</h5>, <h6>nagłówek 6</h6> paragrafy <p>pierwszy paragraf.</p> <p>drugi paragraf<br /> ze złamaniem linii.</p> obrazy <img src="w3schools.jpg" width="104" height="142" /> <!-- Komentarz --> Szkielety tworzenia aplikacji 94

Podstawowe znaczniki II listy numerowane - oznaczane liczbami <ol> <li>pierwszy element listy</li> <li>drugi element listy</li> </ol> wypunktowane - oznaczone kropkami lub symbolami <ul> <li>pierwszy element listy</li> <li>drugi element listy</li> </ul> definicji <dl> <dt>pojęcie</dt><dd>definicja</dd> </dl> Szkielety tworzenia aplikacji 95

Odnośniki I <a href="./plik.html" target="_blank">odniesienie</a> Rodzaje ścieżek do pliku: względna - określa położenie pliku z punktu widzenia bieżącej pozycji w drzewie katalogów: <a href="./plik.html">odniesienie</a> bezwzględna - całkowita ścieżka dostępu do pliku. <a href="/home/user/plik.html">odniesienie</a> adres URL - całkowita ścieżka dostępu do pliku znajdującego się na innym serwerze. <a href="http://serwer.pl/~user/plik.html"> Odniesienie </a> Szkielety tworzenia aplikacji 96

Odnośniki II Połączenia do określonych miejsc na stronie: <a href="./plik.html#nazwa">odniesienie</a> <!-- W HTML --> <a name="nazwa">miejsce odniesienia</a> <!-- W XHTML --> <a id="nazwa">miejsce odniesienia</a> Szkielety tworzenia aplikacji 97

Style semantyczne Style semantyczne - określają rolę tekstu w dokumencie: <em></em> - tekst wyróżniony <strong></strong> - tekst podwójnie wyróżniony <code></code> - fragment kodu <samp></samp> - tekst przykładowy <var></var> - do nazw zmiennych <dfn></dfn> - definicja <cite></cite> - krótki cytat <address></address> - adresy <blockquote></blockquote> - blok długiego cytatu Szkielety tworzenia aplikacji 98

Style prezentacyjne Style prezentacyjne - określają sposób w jaki tekst powinien zostać sformatowany: <b></b> - pogrubienie <i></i> - kursywa <tt></tt> - czcionka maszynowa <sub></sub> - indeks dolny <sup></sup> - indeks górny <big></big> - czcionka powiększona <small></small> - czcionka pomniejszona Szkielety tworzenia aplikacji 99

Tabele Tabele ograniczone znacznikiem <table></table>, zawierają: <thead></thead> - część nagłówkową <tfoot></tfoot> - stopkę <tbody></tbody> - "ciało" tabeli <tr></tr> - wiersze <th></th> - komórki nagłówka <td></td> - zwykłe komórki <colgroup></colgroup> - grupa kolumn <col /> - atrybuty jednej kolumny Szkielety tworzenia aplikacji 100

Przykład tabeli <table border="1"> <thead> <tr> <th>nagłówek1</th> <th>nagłówek2</th> </tr> </thead> <tbody> <tr> <td>dane1</td> <td>dane2</td> </tr> </tbody> </table> nagłówek1 dane1 nagłówek2 dane2 Szkielety tworzenia aplikacji 101

Formularze Formularze używane do przesyłu informacji od użytkownika do serwera otoczone znacznikiem <form></form> - wewnątrz poszczególne elementy formularza i kod HTML tworzący cały układ (akapity, nagłówki, tabele) na jednej stronie można umieścić dowolną liczbę formularzy, ale nie wolno ich zagnieżdżać Szkielety tworzenia aplikacji 102

Formularze cd <form> zawiera dwa podstawowe atrybuty: action - względny lub pełny adres URL, pod który należy przesłać zawartość pól formularza, by otrzymać odpowiedź. method - metoda przesyłania danych od klienta do serwera: get - dane formularza są spakowane i dołączone do URL a, który został wskazany jako wartość action. post - dane przesyłane są niezależnie od odwołania do skryptu. Skrypt otrzymuje je na standardowym wejściu. Szkielety tworzenia aplikacji 103

Metody get i post Metoda get http://server/something?value1=foo&value2=bar Metoda post POST /something HTTP/1.1 Host: server Content-Length: 21 Content-Type: application/x-www-form-urlencoded value1=foo&value2=bar Szkielety tworzenia aplikacji 104

Formularze - składowe Znacznik <input /> definiuje prosty element formularza, który posiada dwa atrybuty: type i name. Atrybut type definiuje rodzaj elementu formularza : "text", "radio", "checkbox", "password", "submit", "reset", "button", "file", "hidden". Atrybut name wskazuje nazwę elementu, która jest niezbędna dla skryptu do odróżnienia poszczególnych pól od siebie. Skrypt pobiera dane z formularza w postaci: nazwa-wartość. Jako wartość przyjmowane są rzeczywiste dane wprowadzane przez użytkownika, natomiast nazwą jest wartość atrybutu name. Szkielety tworzenia aplikacji 105

Przykład formularza <form name="input" action="html_form_action.asp" method="get"> <p>czym najczęściej dojeżdżasz do pracy?<br /> <input type="checkbox" name="srodek_kom" value="rower" /> Rowerem<br /> <input type="checkbox" name="srodek_kom" value="auto" /> Samochodem<br /> <input type="checkbox" name="srodek_kom" value="zbuta" /> Na piechotę<br /><br /> <input type="submit" value="zatwierdź" /> </p> </form> Szkielety tworzenia aplikacji 106

Przykład formularza cd Szkielety tworzenia aplikacji 107

Listy wyboru Opcje wyboru umożliwiają użytkownikowi wybranie z listy przewijanej jednej lub wielu pozycji. Opcje wyboru są wprowadzane za pomocą znacznika <select>: <p>wybierz wykształcenie <select name="wyksztalcenie"> <option>podstawowe</option> <option>średnie</option> <option>wyższe</option> </select> </p> Szkielety tworzenia aplikacji 108

Obszary tekstowe Obszary tekstowe są polami wprowadzania danych, w które użytkownik może wprowadzać wiele linii tekstu. Do wprowadzania tekstu służy znacznik <textarea>: <p>wpisz komentarz:<br /> <textarea name="komentarz" rows="10" cols="50"> </textarea> </p> Szkielety tworzenia aplikacji 109

Elementy ukryte Atrybut type znacznika <input /> może przyjąć wartość "hidden". W takim wypadku element formularza nie będzie wyświetlany. <input type="hidden" name="dane_osobowe" value="on"> Mogą być przesyłane w ten sposób dodatkowe dane: numery ankiety, opis formularza itp. Szkielety tworzenia aplikacji 110

Przesyłanie plików <form enctype="multipart/form-data" method="post" action="http://icis.pcz.pl/cgi-bin/upload"> <p>wyślij plik: <input type="file" name="userfile" /> <input type="submit" value="prześlij" /> </p> </form> Szkielety tworzenia aplikacji 111

Zanik struktury HTML Skutki zaniku struktury w stronach HTML: utrudnione indeksowanie stron, a co za tym idzie ograniczanie możliwości narzędzi wyszukujących obniżenie dostępności strony (np. dla niewidomych) trudności w zarządzaniu i "konserwacji" Szkielety tworzenia aplikacji 112

Powstanie CSS W3C zauważa problem zanikania struktur HTML i zaśmiecania kodu znacznikami definiującymi wygląd strony. W roku 1995 rozpoczyna budowanie CSS W 1996 zalecano stosowanie CSS w takim samym stopniu jak HTML (CSS1 - Cascading Style Sheeets Level 1) CSS2 - powstał w 1998 roku poszerzając funkcjonalności CSS1 CSS3 - w fazie rozwoju Szkielety tworzenia aplikacji 113

Podstawowe zalety CSS możliwość zapanowania nad wyglądem strony bez ingerencji w jej strukturę pozwala na wzbogacenie wyglądu strony umożliwia scentralizowanie opisu wyglądu strony w jednym miejscu umożliwia tworzenie stylów dla grup stron CSS zabezpiecza przed konfliktem reguł (kaskada) zmniejsza rozmiary plików Szkielety tworzenia aplikacji 114

Łączenie CSS i HTML Istnieją trzy możliwości łączenia CSS i HTML: style wewnętrzne style osadzone style zewnętrzne style importowane Szkielety tworzenia aplikacji 115

Style wewnętrzne Do utworzenia stylu wewnętrznego służy w HTML u atrybut style, który można użyć zarówno wewnątrz znacznika body, jak i znaczników definiujących tekst, czy tabele, np.: <body style="font-family: tahoma, helvetica, verdana, arial; font-weight: normal; font-size: 10pt; text-align: justify;"> <p style="color:gray; padding:5px;"> Tekst </p> </body> Szkielety tworzenia aplikacji 116

Style osadzone Do utworzenia stylu osadzonego (embedded style sheet), służy znacznik style z nieodłącznym atrybutem type: <style type="text/css"> body {background:beige;} h1 {color:gray;} p {padding:5px;} </style> Szkielety tworzenia aplikacji 117

Style zewnętrzne Styl można opisać w zewnętrznym pliku o rozszerzeniu css i dołączyć do dokumentu HTML za pomocą znacznika <link> umieszconego wewnątrz nagłówka: <head> <title>tytuł strony</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> W zewnętrznym pliku znajduje się kod postaci: body {background:yellow;} h1 {text-align:center;} p {padding:5px;} Szkielety tworzenia aplikacji 118

Style importowane Styl można zaimportować z innego serwera: <head> <style type="text/css"> @import url(http://www.xyz.pl/styles.css); </style> </head> Szkielety tworzenia aplikacji 119

Budowa reguł (1) Podstawowy opis elementu struktury w HTML u miał postać: <znacznik atrybut1="wartość" atrybut2="wartość2"> tekst </znacznik> W CSS, każda reguła składa się z selektora i deklaracji, zawierającej właściwości i ich wartości: selektor { właściwość1:wartość1; właściwość2:wartość2; } Szkielety tworzenia aplikacji 120

Budowa reguł (2) Selektor określa elementy struktury, do której reguła ma byś zastosowana,np.: h1 {text-align:left; color:blue;} Deklaracja znajdująca się w nawiasach klamrowych, składa się z właściwości, po której następuje dwukropek, oraz z wartości. Zapis deklaracji zakończony jest średnikiem. Wartość może być pojedynczym słowem kluczowym lub oddzieloną spacjami listą słów kluczowych (dozwoloną dla tej właściwości). Jeżeli w deklaracji użyto niepoprawnej właściwości, wtedy cała deklaracja jest ignorowana. Szkielety tworzenia aplikacji 121

Grupowanie selektorów Jeżeli chcemy nadać kilku elementom struktury te same właściwości, nie trzeba powtarzać kilkakrotnie tych samych zapisów zmieniając jedynie nazwę selektora. Wystarczy zapisać przed jedną deklaracją listę selektorów, oddzielonych przecinkami. selektor1, selektor2,..., selektorn { wł1:wart1; wł2:wart2; } Na przykład: body, table, th, td, h3, p {color:gray} Szkielety tworzenia aplikacji 122

Grupowanie deklaracji Jeden element może mieć zdefiniowanych wiele właściwości poprzez umieszczenie wewnątrz nawiasu klamrowego wielu deklaracji: selektor1 { wł1:wart1; wł2:wart2;...; włn:wartn; } Na przykład: body { font-family: tahoma, helvetica, verdana, arial; font-weight: normal; font-size: 10pt; text-align: justify; } Szkielety tworzenia aplikacji 123

Selektory klasy i identyfikatora (1) Oprócz selektorów elementów dokumentu istnieją jeszcze selektory klasy oraz selektory identyfikatora, które pozwalają na przypisanie stylów w sposób niezależny od elementów dokumentu. Aby używać selektorów klas, wewnątrz dokumentu HTML należy dodać atrybuty definiujące klasę: <znacznik class="nazwa_klasy">. Wewnątrz definicji stylów należy w takim wypadku użyć selektora: znacznik.nazwa_klasy {wlaściwość:wartość;} lub:.nazwa_klasy {wlaściwość:wartość;} Szkielety tworzenia aplikacji 124

Selektory klasy i identyfikatora (2) Aby używać selektorów identyfikatorów, wewnątrz dokumentu HTML należy dodać atrybut definiujący: <znacznik id="identyfikator">. Wewnątrz definicji stylów należy w takim wypadku użyć selektora: #identyfikator {wlaściwość:wartość;} Różnice pomiędzy selektorami klas i identyfikatorów: klasy mogą być przyporządkowane dowolnej liczbie elementów dany identyfikator powinien sie pojawić w dokumencie tylko raz identyfikator ma wyższy priorytet przy narzucaniu stylu Szkielety tworzenia aplikacji 125

Pseudoklasy i pseudoelementy Selektory pseudoklas i pseudoelementów służą do nadawania stylów elementom o zmiennych stanach, bądź nieistniejących w HTML u struktur. Podstawowe pseudoklasy w CSS to, klasy tyczące połączeń: a:link - styl łącza jeszcze nieodwiedzanego a:visited - styl łącza odwiedzonego a:active - styl łącza uaktywnionego Podstawowe pseudoelementy w CSS to: :first-letter - określa odrębny styl dla pierwszej litery elementu struktury :first-line - określa odrębny styl dla pierwszej linii elementu struktury Szkielety tworzenia aplikacji 126

Drzewo struktur HTML Szkielety tworzenia aplikacji 127

Selektory kontekstowe Selektory kontekstowe umożliwiają zdefiniowanie stylu, dla odpowiedniego elementu wewnątrz drzewa dokumentu HTML. ul li ul li {color:gray;} Selektor kontekstowy to kompozycja dwóch lub więcej selektorów elementów rozgraniczonych spacjami. Każda spacja oznacza zagnieżdżenie. Szkielety tworzenia aplikacji 128

Dziedziczenie i wagi Elementy zagnieżdżone dziedziczą styl, po elemencie nadrzędnym. Niewszystkie właściwości są dziedziczone (marginesy, odstępy od ramek, tło, obramowanie). W wypadku powtarzających się definicji stylu dla danego elementu, CSS zabezpiecza się przed konfliktami za pomocą wag nadawanych poszczególnym regułom: selektor {właściwość:wartość;} /* 1 */ selektor1 selektor2 {właściwość:wartość;} /* 2 */.klasa {właściwość:wartość;} /* 10 */ selektor.klasa {właściwość:wartość;} /* 11 */ selektor1.klasa1 selektor2.klasa2 {właściwość:wartość;} /* 22 */ #identyfikator {właściwość:wartość;} /* 100 */ Szkielety tworzenia aplikacji 129

Kaskada Algorytm kaskady: Znajdź wszystkie deklaracje zawierające selektory odpowiadające danemu elementowi. Posortuj znalezione deklaracje według wag. Posortuj znalezione deklaracje ze względu na kolejność występowania (uznaje się, że deklaracje z plików zewnętrznych są przesłaniane stylami osadzonymi, a te stylami wewnętrznymi). Zawsze najważniejszy jest styl stojący na końcu. Szkielety tworzenia aplikacji 130

Architektura aplikacji Django Szkielety tworzenia aplikacji 131

Składniki aplikacji Django URLconf - odpowiedzialne za przetwarzanie adresów URL na widoki, Widoki - funkcje przetwarzające żadanie HttpRequest i zwracające odpowiedź HttpResponse, Middleware (warstwa pośrednicząca) - umożliwia lekkie, niskopoziomowe przetwarzanie wejścia-wyjścia Django (żądań, odpowiedzi, widoki), Szablony - plik tekstowy zawierający zazwyczaj kod HTML oraz tagi (kontrola logiki szablonu i przekształcanie treści), Modele - źródło danych aplikacji, zazwyczaj jest powiązane z tabelami bazy danych, ORM - odpowiedzialne za przekształcenie postaci obiektowej na postać relacyjną. Szkielety tworzenia aplikacji 132

URLconf I W celu zaprojektowania URL-i dla aplikacji tworzy się moduł Pythona nieformalnie zwany URLconf (konfiguracja URL). Wspomniany moduł jest zaimplementowany w czystym Pythonie jest prostym mapowaniem pomiędzy wzorcami adresów URL (zapisanymi jako wyrażenia regularne) a Pythonowymi funkcjami wywołań zwrotnych (widoków). Mapowanie to może być, w zależności od potrzeb krótkie lub długie. Może odwoływać się do innych mapowań i ze względu na to że jest modułem Pythona może być tworzone dynamicznie. Szkielety tworzenia aplikacji 133

URLconf II Sposób przetwarzania żądania ze strony przez Django: 1 Django określa moduł z głównym URLconf. Zazwyczaj jest określony przez zawartość zmiennej ROOT_URLCONF, czasem jest też określane przez atrybut urlconf obiektu nadchodzącego żadania HttpRequest (ustawione przez warstwę pośrednią), jej zawartość będzie użyta zamiast zmiennej ROOT_URLCONF. 2 Django ładuje ten moduł i szuka zmiennej urlpatterns. Powinna to być lista Pythona, w formacie zwróconym przez funkcję django.conf.urls.patterns(). 3 Django przechodzi po kolei przez każdy wzorzec URL i kończy przy pierwszym dopasowaniu żądanego adresu URL. Szkielety tworzenia aplikacji 134

URLconf III 4 Po tym jak jedno z wyrażeń regularnych dopasowuje URL, Django importuje i wywołuje dany widok, jest nim zwykła funkcja Pythona. Widok otrzymuje obiekt HttpRequest jako swój pierwszy argument natomiast resztą argumentów są wartości przechwycone przez wyrażenie regularne. 5 Jeśli żadne z wyrażeń regularnych nie dopasowało URL-a lub wywoływany jest wyjątek przy jednym z punktów tego procesu, Django wywołuje odpowiedni widok obsługi błędów. Szkielety tworzenia aplikacji 135

URLconf IV from django.conf.urls import patterns, url, include urlpatterns = patterns(, (r ^articles/2003/$, news.views.special_case_2003 ), (r ^articles/(\d{4})/$, news.views.year_archive ), (r ^articles/(\d{4})/(\d{2})/$, news.views.month_archive ), (r ^articles/(\d{4})/(\d{2})/(\d+)/$, news.views.article_detail ), ) /articles/2005/03/ dopasowanie do trzeciego wzorca. /articles/2005/3/ brak dopasowania (wymagane dwie cyfry miesiąca). /articles/2003/ dopasowanie do pierwszego wzorca. /articles/2003 brak dopasowania (brak kończącego /). /articles/2003/03/03/ dopasowanie do ostatniego wzorca. Szkielety tworzenia aplikacji 136

Grupy nazwane I Wcześniejszy przykład używał nienazwanych grup wyrażeń regularnych (za pomocą nawiasów) do przechwycenia części URL-a i przekazania ich jako argumentów określonych pozycją do widoku. W bardziej zaawansowanych zastosowaniach jest zazwyczaj konieczne używanie nazwanych grup wyrażeń regularnych do przechwytywania części URL-a i przekazywania ich do widoku jako argumentów kluczowych. Składnia Pythona dla nazwanych wyrażeń regularnych - (?P<name>pattern) - name jest nazwą grupy a wzorzec jest używany do dopasowania. Szkielety tworzenia aplikacji 137

Grupy nazwane II urlpatterns = patterns(, (r ^articles/2003/$, news.views.special_case_2003 ), (r ^articles/(?p<year>\d{4})/$, news.views.year_archive ), (r ^articles/(?p<year>\d{4})/(?p<month>\d{2})/$, news.views.month_archive ), (r ^articles/(?p<year>\d{4})/(?p<month>\d{2})/(?p<day>\d{2})/$, news.views.article_detail ), ) Żądanie /articles/2005/03/ wywoła funkcję news.views.month_archive(request, year= 2005, month= 03 ) zamiast jak w poprzednim przypadku news.views.month_archive(request, 2005, 03 ). Szkielety tworzenia aplikacji 138

Funkcje widoku I Widok (funkcja widoku) jest po prostu funkcją, która przyjmuje żądanie Http i zwraca odpowiedź Http. Odpowiedzią może być w zasadzie dowolna: np. strona Html, przekierowanie do innego adresu, błąd 404, dokument XML, obrazek itd. Widok zawiera całą logikę konieczną do przetworzenia żądania i zwrócenia odpowiedzi. Kod odpowiedzialny za implementację widoku może co prawda znajdować się w dowolnym miejscu (jeśli tylko znajduje się na ścieżkach przeszukiwań Pythona), zazwyczaj jednak przestrzega się konwencji umieszczając widoki w pliku views.py znajdującym się w katalogu projektu lub aplikacji. Szkielety tworzenia aplikacji 139

Funkcje widoku II from django.http import HttpResponse def my_view(request): #... if foo: return HttpResponseNotFound( <h1>not found</h1> ) else: return HttpResponse( <h1>page was found</h1> Szkielety tworzenia aplikacji 140

Widoki generyczne I Tworzenie aplikacji internetowych jest monotonne wymaga wielokrotnego zapisu pewnych szablonów. Django dostarcza rozwiązań nie tylko na poziomie modelu i szablonu, lecz również na poziomie widoku. Widoki generyczne Django zostały zaprojektowane w celu ułatwienia tworzenia powtarzalnych zadań - dostarczają pewnych pewnych idiomów i wzorców na podstawie tworzonych wcześniej widoków. Wprowadzają warstwę abstrakcji przez co możliwy jest szybki zapis powtarzalnych widoków bez potrzeby zapisu dużej ilości kodu. Można rozpoznać powszechnie używane zadania jak wyświetlanie listy obiektów i zapisać kod wyświetlający listę dowolnych obiektów. Wymagany model może być przekazywany jako dodatkowy argument dla URLconf. Szkielety tworzenia aplikacji 141

Widoki generyczne II Django zapewnia łatwy do wykorzystania kod widoków: wykonujących nieskomplikowane powszechnie wykonywane zadania: przekierowanie do różnych stron i renderowanie wybranego szablonu. wyświetlających listę powiązanych ze sobą obiektów oraz stron zawierających istotne szczegóły dla pojedynczych obiektów (lista zamówień klientów i zamówienie dla określonego klienta). prezentujących oparte na dacie obiekty w postaci stron zawierających ustalone działania w postaci wykazów rok/miesiąc/dzień, and stron zawierających ostatnie działania - latest (np. archiwum bloga). umożliwiających użytkownikom tworzenie, aktualizacje i niszczenie obiektów z i bez autoryzacji. Szkielety tworzenia aplikacji 142

Widoki generyczne III Najważniejsze widoki generyczne: View - klasa bazowa dla wszystkich widoków, TemplateView - renderuje określony szablon (najczęściej statyczne widoki), RedirectView - przekierowanie do określonej strony, DetailView - strona reprezentująca pojedynczy obiekt, ListView - reprezentacja listy obiektów, FormView - widok, który wyświetla formę, Szkielety tworzenia aplikacji 143

Widoki generyczne IV {Create,Update,Delete}View - formy do tworzenia, edycji i niszczenia obiektów, ArchiveIndexView - strona najwyższego poziomu prezentująca najnowsze obiekty {Year,Month,Week,Day,Today}ArchiveView - umożliwia wyświetlenie obiektów powiązanych z datą. DateDetailView - pojedynczy obiekt powiązany z datą. Szkielety tworzenia aplikacji 144

Widoki generyczne V Przykład wykorzystujący dziedziczenie: from django.views.generic import TemplateView class AboutView(TemplateView): template_name = "about.html" Odziedziczony atrybut template_name przechowuje nazwę (ze ścieżką) szablonu jaki ma zostać użyty (w przykładzie w katalogu templates został stworzony katalog o nazwie about.html) W urls.py dodaje się import: from book.views import AboutView Natomiast do reguł mapujących URL-e: (r ^about/$, AboutView.as_view()), Szkielety tworzenia aplikacji 145

Widoki generyczne VI Po odwołaniu do adresu /about/ zostanie wyświetlona strona z użyciem szablonu about.html. Można korzystać także bezpośrednio w urls.py przy mapowaniu linków na widoki. Wystarczy że zaimportować TemplateView i użyć: (r ^about2/$, TemplateView.as_view(template_name="about.html")), Szkielety tworzenia aplikacji 146