Programowanie i projektowanie obiektowe

Podobne dokumenty
Quiz Aplikacja internetowa

Wybrane działy Informatyki Stosowanej

Programowanie w Internecie

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Programowanie i projektowanie obiektowe

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Aplikacje WWW - laboratorium

Testy aplikacji webowych

Programowanie obiektowe

Programowanie internetowe

Zaawansowany kurs języka Python

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

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

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

Wstęp do programowania

Bazy Danych i Usługi Sieciowe

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4

Laboratorium 1 Wprowadzenie do PHP

Kurs rozszerzony języka Python

Aplikacje internetowe - laboratorium

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Języki programowania wysokiego poziomu WWW

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

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

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Wstęp do programowania

Bazy Danych i Usługi Sieciowe

OpenLaszlo. OpenLaszlo

Zaawansowany kurs języka Python

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

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

Programowanie w Ruby

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

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

Lista ToDo Aplikacja internetowa

Programowanie i projektowanie obiektowe


Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

O stronach www, html itp..

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

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

Zaawansowany kurs języka Python

Pracownia Technik Obliczeniowych

Programowanie i projektowanie obiektowe

Nowoczesne projektowanie aplikacji intrnetowych - opis przedmiotu

Wybrane działy Informatyki Stosowanej

prepared by: Programowanie WWW Servlety

Programowanie wizualne

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

WPROWADZENIE. Użycie PHP

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Programowanie i projektowanie obiektowe

Podstawowe wykorzystanie Hibernate

Wstęp. Ale po co? Implementacja

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Technologie internetowe ASP.NET Core. Paweł Rajba

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

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

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

OPT Open Power Template. System szablonów OPT. Przykładowy skrypt oraz szablon OPT OPT API

OpenPoland.net API Documentation

Wprowadzenie do HTML, CSS, JavaScript, PHP. Kurs

Programowanie zorientowane obiektowo. Mateusz Kołecki

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Internetowe bazy danych

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Systemy internetowe Wykład 3 PHP

Kurs rozszerzony języka Python

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Wordpress. Dla bloggera i webdevelopera. Piotr Wasilewski wasilewski.piotrek (at) gmail.com

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Tworzenie Stron Internetowych. odcinek 10

Tomasz Boiński: 1. Pozycjonowanie stron i zastosowanie mod_rewrite

Spring Web MVC, Spring DI

Kompresja stron internetowych

Aplikacje WWW - laboratorium

Instrukcja instalacji PHP-Hypercachera Refresher Standard oraz PHP-Hypercachera Refresher GZIP na Twojej witrynie

Programowanie urządzeń mobilnych. projekt 6 ( )

Tomasz Grześ. Systemy zarządzania treścią

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

Aplikacje WWW Wprowadzenie

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

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

XML-RPC: Zdalne wykonywanie procedur

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Sieci komputerowe. Wykład 8: Warstwa zastosowań: FTP i HTTP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

1 Wprowadzenie do J2EE

Aplikacje WWW - laboratorium


Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Kurs języka Ruby. Ruby on Rails ActionPack

Programowanie i projektowanie obiektowe

Orange Send MMS. Autoryzacja. Metoda HTTP. Parametry wywołania. API wyślij MMS dostarcza wiadomości MMS. Basic POST

Paweł Rajba,

Aspekty bezpieczeństwa aplikacji internetowych

Transkrypt:

Programowanie i projektowanie obiektowe CherryPy, Genshi Paweł Daniluk Wydział Fizyki Jesień 2016 P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 1 / 20

Aplikacje webowe Podejście standardowe Serwer (np. Apache) Pliki HTML, CSS i grafiki w odpowiednich katalogach Skrypty PHP Pewna niedogodność Trudno jest zrealizować przyjazne dla użytkownika adresy URL, np: http://mojastrona.pl/blog/2013/05/11 Zamiast tego może być: http://mojastrona.pl/blog.php?year=2013&month=05&day=11 Można stosować mod_rewrite. P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 2 / 20

Aplikacje webowe Podejście standardowe Serwer (np. Apache) Pliki HTML, CSS i grafiki w odpowiednich katalogach Skrypty PHP Pewna niedogodność Trudno jest zrealizować przyjazne dla użytkownika adresy URL, np: http://mojastrona.pl/blog/2013/05/11 Zamiast tego może być: http://mojastrona.pl/blog.php?year=2013&month=05&day=11 Można stosować mod_rewrite. Struktura plików/skryptów zazwyczaj nie odpowiada logicznej strukturze serwisu. P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 2 / 20

CherryPy Katalogi w strukturze plików serwisu odpowiadają klasom Elementy katalogów (pliki i podkatalogi) odpowiadają atrybutom Aplikacja jest autonomicznym serwerem webowym P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 3 / 20

CherryPy Katalogi w strukturze plików serwisu odpowiadają klasom Elementy katalogów (pliki i podkatalogi) odpowiadają atrybutom Aplikacja jest autonomicznym serwerem webowym Treść nie jest przechowywana w plikach, ale generowana na bieżąco. Zazwyczaj konieczne jest połączenie z bazą danych (np. SQLAlchemy). HTML wygodnie jest tworzyć przy pomocy tzw. template processor (np. Genshi) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 3 / 20

CherryPy Katalogi w strukturze plików serwisu odpowiadają klasom Elementy katalogów (pliki i podkatalogi) odpowiadają atrybutom Aplikacja jest autonomicznym serwerem webowym Treść nie jest przechowywana w plikach, ale generowana na bieżąco. Zazwyczaj konieczne jest połączenie z bazą danych (np. SQLAlchemy). HTML wygodnie jest tworzyć przy pomocy tzw. template processor (np. Genshi) Możliwe jest serwowanie plików statycznych Współpraca z serwerem Apache (na kilka sposobów) SSL P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 3 / 20

Hello World hello.py import c h e r r y p y c l a s s HelloWorld ( o b j e c t ) : d e f i n d e x ( s e l f ) : r e t u r n " H e l l o World! " i n d e x. exposed = True c h e r r y p y. q u i c k s t a r t ( HelloWorld ( ) ) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 4 / 20

Dostęp do żądania i odpowiedzi HTTP Żądanie (ang. request) HTTP składa się z opisu żądania (GET lub POST, ścieżka), nagłówków i treści. Odpowiedź (ang. response) HTTP składa się z kodu statusu, nagłówków i treści. import c h e r r y p y c l a s s HelloWorld ( o b j e c t ) : d e f i n d e x ( s e l f ) : r e s="" f o r k, v i n c h e r r y p y. r e q u e s t. h e a d e r s. i t e r i t e m s ( ) : r e s+="%s : %s \n" % ( k, v ) c h e r r y p y. r e s p o n s e. h e a d e r s [ Content Type ] = t e x t / p l a i n r e t u r n r e s i n d e x. exposed = True c h e r r y p y. q u i c k s t a r t ( HelloWorld ( ) ) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 5 / 20

Eksponowanie Jedynie metody z atrybutem exposed są widoczne. Przez atrybut c l a s s Root ( o b j e c t ) : d e f i n d e x ( s e l f ) : """ Handle the / URI """ i n d e x. exposed = True Przez dekorator c l a s s Root ( o b j e c t ) : @cherrypy. e xpose d e f i n d e x ( s e l f ) : """ Handle the / URI """ Atrybut klasy, jeżeli jest metoda call c l a s s Node ( o b j e c t ) : exposed = True d e f call ( s e l f ) : """ """ P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 6 / 20

Struktura serwisu """ This example can h a n d l e the URIs : / > Root. i n d e x / page > Root. page / node > Node. call """ i m p o r t c h e r r y p y c l a s s Node ( o b j e c t ) : e x p o s e d = True d e f call ( s e l f ) : r e t u r n "The node c o n t e n t " c l a s s Root ( o b j e c t ) : d e f init ( s e l f ) : s e l f. node = Node ( ) @ cherrypy. expose d e f i n d e x ( s e l f ) : r e t u r n "The i n d e x o f t h e r o o t o b j e c t " d e f page ( s e l f ) : r e t u r n T h i s i s t h e " page " c o n t e n t page. exposed = True i f name == main : c h e r r y p y. q u i c k s t a r t ( Root ( ) ) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 7 / 20

Argumenty eksponowanych metod Nazwane (nie ma rozróżnienia między GET a POST) c l a s s Root ( o b j e c t ) : d e f dologin ( s e l f, username=none, password=none ) : """ Check the username & password """ dologin. exposed = True http://localhost/dologin?username=user&password=pass Pozycyjne c l a s s Root ( o b j e c t ) : d e f b l o g ( s e l f, year, month, day ) : """ D e l i v e r the b l o g p o s t. A c c o r d i n g to y e a r month d b l o g. exposed = True http://localhost/blog/2005/01/17 P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 8 / 20

Argumenty eksponowanych metod Argumenty pozycyjne mogą być dopasowane do różnych metod. CherryPy znajduje najlepiej pasującą. Przykład /branch/leaf/4: app.root.branch.leaf( 4 ) app.root.branch( leaf, 4 ) app.root.index( branch, leaf, 4 ) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 9 / 20

Mnóstwo innych funkcji obsługa sesji wtyczki i narzędzia SSL logi cache P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 10 / 20

Łatwe generowanie HTML Podejście tradycyjne Skrypt PHP generowanie wyjścia wymieszane z obliczeniami program trudny w utrzymaniu Genshi HTML generowany na podstawie przekazanych obiektów Pythonowych rozszerzenia składni XHTML o dodatkowe atrybuty możliwość osadzania kodu Pythonowego P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 11 / 20

Przykład <? python t i t l e = "A Genshi Template " f r u i t s = [ " a p p l e ", " orange ", " k i w i " ]?> <html x m l n s : p y=" h t t p : // g e n s h i. e d g e w a l l. org /"> <head> < t i t l e p y : c o n t e n t=" t i t l e ">This i s r e p l a c e d.</ t i t l e> </ head> <body> <p>these a r e some o f my f a v o r i t e f r u i t s :</p> <u l> < l i p y : f o r=" f r u i t i n f r u i t s "> I l i k e ${ f r u i t } s </ l i > </ u l> </ body> </ html> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 12 / 20

Przykład Wynik <html> <head> < t i t l e>a Genshi Template</ t i t l e> </ head> <body> <p>these a r e some o f my f a v o r i t e f r u i t s :</p> <u l> < l i >I l i k e a p p l e s</ l i > < l i >I l i k e o r a n g e s</ l i > < l i >I l i k e k i w i s</ l i > </ u l> </ body> </ html> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 13 / 20

Z poziomu Pythona >>> from genshi.template import MarkupTemplate >>> tmpl = MarkupTemplate( <h1>hello, $name!</h1> ) >>> stream = tmpl.generate(name= world ) >>> print(stream.render( xhtml )) <h1>hello, world!</h1> TemplateLoader from g e n s h i. t e m p l a t e import TemplateLoader l o a d e r = TemplateLoader ( [ t e m p l a t e s _ d i r 1, t e m p l a t e s _ d i r 2 ] ) tmpl = l o a d e r. l o a d ( t e s t. html ) stream = tmpl. g e n e r a t e ( t i t l e = H e l l o, world! ) p r i n t ( stream. r e n d e r ( ) ) P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 14 / 20

Dostęp do argumentów >>> from genshi.template import MarkupTemplate >>> tmpl = MarkupTemplate( <em>$items[0].capitalize() item</em> ) >>> print(tmpl.generate(items=[ first, second ])) <em>first item</em> >>> from genshi.template import MarkupTemplate >>> tmpl = MarkupTemplate( <em>$dict.foo</em> ) >>> print(tmpl.generate(dict= foo : bar )) <em>bar</em> Dostęp do elementów słownika i atrybutów obiektów jest możliwy w dwóch notacjach: z kropką (obj.attr) i nawiasami kwadratowymi (obj[attr]). P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 15 / 20

Dyrektywy if <d i v p y : i f=" f o o "> <p>bar</ p> </ d i v> < p y : i f t e s t=" f o o "> <d i v> <p>bar</ p> </ d i v> </ p y : i f> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 16 / 20

Dyrektywy c.d. choose <d i v p y : c h o o s e=""> <span py: when=" 0 == 1">0</ span> <span py: when=" 1 == 1">1</ span> <span p y : o t h e r w i s e="">2</ span> </ d i v> <d i v p y : c h o o s e="1"> <span py: when=" 0">0</ span> <span py: when=" 1">1</ span> <span p y : o t h e r w i s e="">2</ span> </ d i v> <p y : c h o o s e t e s t="1"> <py:when t e s t="0">0</ py:when> <py:when t e s t="1">1</ py:when> <p y : o t h e r w i s e>2</ p y : o t h e r w i s e> </ p y : c h o o s e> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 17 / 20

Dyrektywy c.d. for <u l> < l i p y : f o r=" item i n i t e m s ">${ item }</ l i > </ u l> <u l> <p y : f o r each=" item i n i t e m s "> < l i >${ item }</ l i > </ p y : f o r> </ u l> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 18 / 20

Dyrektywy c.d. def <d i v> <p p y : d e f=" g r e e t i n g ( name ) " c l a s s=" g r e e t i n g "> H e l l o, ${name }! </p> ${ g r e e t i n g ( world )} ${ g r e e t i n g ( e v e r y o n e e l s e )} </ d i v> <d i v> <p y : d e f f u n c t i o n=" g r e e t i n g ( name ) "> <p c l a s s=" g r e e t i n g ">H e l l o, ${name }!</p> </ p y : d e f> </ d i v> P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 19 / 20

Przykład Geddit? http://genshi.edgewall.org/wiki/genshitutorial P. Daniluk(Wydział Fizyki) PO w. IX Jesień 2016 20 / 20