Esitlus laaditakse üles. Palun oodake

Esitlus laaditakse üles. Palun oodake

Veebitehnoloogiad IV: Zope, Plone, Python

Seotud esitlused


Teema esitlus: "Veebitehnoloogiad IV: Zope, Plone, Python"— Esitluse väljavõte:

1 Veebitehnoloogiad IV: Zope, Plone, Python
Kaido Kikkas VR1 2009/2010 © 2009 Kaido Kikkas. Levitamine sätestatud vastavalt GNU Vaba Dokumentatsiooni Litsentsile (v l.2 või uuem) või Creative Commons Attribution-ShareAlike (BY-SA) 3.0 litsentsile‏

2 Veebitegemise variante
Otse ja lihtsalt (X)HTML (X)HTML + erinevad skriptikeeled + andmebaasid + sisuhaldussüsteem Rakendusserver

3 Rakendusserver Rakendusserver – vahelüli veebihalduri ja erinevate teenuste (andmebaasid jms) vahel Tööks vaja täiendavalt ainult „õhukest klienti“ (thin client) – veebilehitsejat. Kogu töö toimub serveris Ärivara: IBM WebSphere, Java System Application Server, Oracle Application Server, Borland Enterprise Server, Novell Extend Vaba tarkvara: Red Hat JBoss, Zope, Midgard

4 Zope Digital Creations, Jim Fulton 1996 => Principia
Algul kinnine kommertssüsteem. DC osanik Hadar Pedhazur soovitab aastal lasta kood vabaks ja muuta firma ärimudel teenusepakku- jaks. Principia => Zope (Z Object Publishing Environment) Kiire levik (NASA, US Navy, paljud firmad) Katsetamiseks sobib

5 Zope'i võimalused Vaba lähtekood, Zope Public License (GPL-üh.)
Lihtne veebipõhine haldusliides (vaikimisi port 8080), lisaks ligipääs SSH ja FTP kaudu Platvormid: ametlikult Linux, Solaris ja Win32, töötab ka paljudel teistel (MacOS X, BSD, BeOS, HP-UX) Suur hulk eri tasemel lisamooduleid (produkte) Iga asi on objekt (vrd. Unixi „iga asi on fail“) - ühine suur objektibaas => kogu inf ühes suures failis (eksport-import ka osade kaupa)

6 ... Oma meiliserver (Mailhost) ja veebiserver (ZServer), lisaks ühilduvus Apache'i, IIS ja teiste levinumate veebiserveritega Toetab enamikku levinud andmebaasistandardi- test (Oracle, MS SQL, MySQL, PostgreSQL jpt) Üldjuhul lihtne paigaldada Sisseehitatud kasutajahaldus ja turvamehhanism Tagurdamisvõimalus (Undo)

7 Üldvaade

8 Produktid Mõnel juhul lisafunktsioone pakkuvad moodulid, enamasti aga täismahus rakendused, mis töötavad Zope'i keskkonnas. vt. ka Installiks piisab harilikult lahtipakkimisest Zope kataloogi alamkataloogi lib/python/Products ning Zope'i uuestikäivitamisest Installitud produktid on saadaval Zope'i haldusliidese menüüst

9 DTML Document Template Markup Language
HTMLi sarnane ja paralleelselt kasutatav märgendikeel Peamine ülesanne: eri komponentide sidumine ja korduvate elementide lühendamine Lihtne näide: standard_html_header ja standard_html_footer võimaldavad kogu veebisaidil kasutada ühtset stiili

10 DTML näide Standard_html_header: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xml:lang="et" lang="et"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso "> <meta name="generator" content="ise tehtud Zope'i kaudu" /> <meta name="author" content="Kaido Kikkas" /> <meta name="classification" content="kodulehekülg" /> <meta name="description" content="Kaku Akadeemia õppematerjal" /> <meta name="keywords" content="Kakk, PHP, SQL, Zope" /> <title>Kaku Akadeemia</title> <link rel="stylesheet" href="kakk.css" type="text/css" /> </head> <body>

11 ... Standard_html_footer: <p>© 2007 Kakk</p> </body> </html> Nüüd saame mistahes lehe oma Zope'i veebisaidis luua kohe sellisena: <dtml-var standard_html_header> <h1>pealkiri</h1> <p>Sisu</p> <dtml-var standard_html_footer> Sisuliselt kasutatakse siin samas rollis kui PHP include/require -lauseid

12 DTMLi infoallikad Lisaks võib DTML-märgendites kasutada infot, mis pärineb teistest Zope'i objektidest välistest allikatest (andmebaasid jms) kasutaja veebilehitsejast (cookied, veebipäised) Sageli kasutatakse Pythoni koodi lisamist (expr- klausliga) Märkus – DTML kasutab nii paaris- kui üksikmärgendeid (nagu HTML, kuid mitte XHTML)

13 PHP-st tuttav näide: <dtml-if expr="sugu == 'naine' "> See on naiste lehekülg! <dtml-else> See on meeste lehekülg! </dtml-if> NB! Lubatud on ka lühikuju – expr-lause ärajätmine ja lihtsalt jutumärkide kasutamine: <dtml-if "sugu == 'naine'">

14 Veel üks näide Teeme meilisaatmisvormi (mingi teenusega liitumise registreerimiseks), kasutades Zope'i enda Mailhosti. Esmalt veebivorm: <dtml-var standard_html_header> <form action="meilimootor" method="post"> <p>Eesnimi: <input type="text" name="eesnimi" size="30"></p> <p>Perenimi: <input type="text" name="perenimi" size="30"></p> <p>Aadress: <input type="text" name="aadress" size="50"></p> <p>Telefon: <input type="text" name="telefon" size="20"></p> <p>E-post: <input type="text" name="epost" size="30"></p> <p><input type="submit" value="Saada"></p> </form> <standard_html_footer> NB! Kasutame eespool nähtud päise- ja jalusefaile!

15 Meilimootor <standard_html_header> <dtml-sendmail mailhost="MeieMeiliMasin"> To: From. <dtml-var epost> Subject: Tahan registreeruda Soovin registreeruda Teie teenuse kasutajaks. Nimi: <dtml-var eesnimi> <dtml-var perenimi> Aadress: <dtml-var aadress> Telefon: <dtml-var telefon> E-post: <dtml-var epost> </dtml-sendmail> <h1>Aitäh, <dtml-var eesnimi>!</h1> <p>Teie soov on haldurile edastatud.</p> <dtml-var standard_html_footer>

16 DTML ja TAL DTMLi puudused Zope Bible'i järgi:
Ei saa hästi redigeerida väliste veebieditoridega Ei saa redigeerida WYSIWYG-editoridega Kiputakse segama kokku programmiloogikat ja esitust Ise lisaksin veel – kohati paindumatu oma HTMLi genereerimisel – tulemuseks on ebastandardne ja ligipääsmatu veebileht Uus suund alates Zope 2.5-st – kasutatakse lehe- malle (Page Templates) ja vastavat XML/XHTML- põhist keelt TAL (Template Attribute Language) ja selle tuletisi

17 TAL Põhimõte – luuakse lehekülje mall (n.ö. skelett), mille väljadesse saab sisu kirjutada dünaamiliselt (sellisena sarnaneb mõneti HTML/PHP tehnikale) XMLi süntaksiga argumendid, mida saab lisada tavalistesse XHTML-märgenditesse: N:<p tal:content="user/getUserName">Kai</p> Hetkel pikemalt ei käsitle. vt Zope Bookist: /ZopeBook/

18 2,3,5 Zope 2.x – laialt kasutatav seeria, aga rida puudusi
Zope 3.x – alates novembrist 2004, paralleelselt eelmise seeriaga 3 on laiaulatuslik uuestikirjutus, ei ühildu 2-ga – 2 viimaseid versioone arendatakse 3 suunas Five – 2. seeria laiendus, mis lubab kasutada osa 3. seeria funktsioonidest

19 Zope'i paigaldamine Pakkida lahti Käivitada install
NB! Uuemate Zope'i versioonide paigaldus on kaheosaline – esmalt paigaldatakse põhiosa, seejärel luuakse nn instants ehk konkreetne Zope'i realisatsioon – see võimaldab ühel serveril käitada mitu erinevat Zope'i Linuxitel paigaldatakse põhiosa, instants tuleb ikkagi ise luua. Vt dokumentatsiooni

20 Plone Zope'il baseeruv sisuhaldussüsteem, üks enim kasutatavaid Zope'i mooduleid Loodi programmeerija poolt, alates aastast juhib arendamist Plone Foundation Nimi pandud samanimelise 90-ndatel Inglismaal tegutsenud tehnobändi järgi Tänaseks üks kiirema levikuga sisuhaldussüsteeme

21

22 Omadusi Standardne, multiplatvormiline, palju tõlkeid
Lihtsa portaalitooriku ülesseadmine on äärmiselt lihtne Sisuga töötamine on lihtne Zope'i turvamehhanism => lihtne anda eri autoritele erinevaid õigusi Vahetatavad kujundused (nn. nahad) Zope'i „pikendus“ (produkt) – saab hallata nii omaette kui läbi Zope'i

23 Python Guido van Rossumi poolt aasta paiku loodud skriptikeel (tänaseks üldotstarbeline keel) versioon 2 aastast 2000, a-st 2008 paralleelselt v3 Interpreteeriv keel (nagu standard-BASIC), olemas vahekoodikompilaator OO-keel Lai platvormivalik MSDOSist Maci ja Linuxini Sobib algajatele lihtsa ja selge süntaksi poolest

24 Kus kasutatakse Veebi-skriptikeel (algne kasutus; ~ PHP) – YouTube, Google, Yahoo!... Rakendusserverid (Zope, Django) Erinev graafikatarkvara – GIMP, PaintShop Pro, Inkscape, Maya, Blender... Sugar (OLPC XO) Linuxi paigaldustarkvara (Ubuntu, Red Hat jpt)

25 „Hello World“ Väga lihtne: >>> print "Tere-tere, maakera!"
Siin >>> tähistab Pythoni käsurida Lause lõpetab reavahetus (v.a. erijuhud), eraldi lõpusümbolit (nagu C-s jm. semikoolon) ei ole. Ka veerupositsioon on oluline (sellest hiljem)! Veel üks lihtne näide koos sisestusega: nimi = raw_input("Mis su nimi on? ") print "Tere, ", nimi Muutujanimed on ilma tüübitunnuseta

26 Loogika ja andmetüübid
Üldiselt tavapärane, mittevõrdus nii != kui <>, võrdus == (= on omistus) Arvutüübid: Täisarv - 0, -1, 10 pikk täisarv L (L tähistab pikka väärtust) reaalarv , 1.0, 3.45e-10, 5E210, 4.2e+212 Kaheksandarv – 062 kuueteistkümnendarv – 0xff, 0x1A kompleksarv – 24+10j, 4j

27 Tekstitüüp Sarnased põhimõtted teiste keeltega. Nagu PHP-s kasutatakse teksti sees jutumärkide või ülakoma esitamiseks kurakaldkriipsu: tekst = "Vanaema ostis \"Philipsi\" tolmuimeja" Teksti võib vaadelda ka massiivina: >>> tekst = "Sokid ja saapad" >>> tekst[6] 'j' >>> Paneme tähele, et massiivi järjestust loetakse ka siin 0-st (väljastati teksti 7. täht)!

28 ... Tekst mitmel real – kaht moodi >>> print "See on siin üks \ jube pikk lause!" Parem: kolmekordsed jutumärgid/ülakomad: >>> pikklause = """Kogu see pikk jutt siin, tuleb ekraanile täpselt nii, nagu ma ta siia kirjutan – umbes nagu HTMLis <pre>-märgendite abil. NB! Isegi jutumärke ei ole vaja paosümbolitega varustada! N: Papa "Lada" pani puusse. """

29 ... Tekstijuppide liitmine käib +-märgiga. Kui tahta teksti sisse panna arvväärtusi, tuleb see esmalt str-funktsiooniga tekstiks teha: >>> print "Onu Jüri ostis " + str(5) + " õlut."

30 Massiivid Kaks tüüpi. Tavamassiivi moodi on rohkem list
Listitüüp võib sisaldada eri tüüpi elemente, lisaks on eraldi funktsioonid nagu append, insert ja del elementidega opereerimiseks Saab määrata ka listilõikeid ehk väljavõtteid (slice)

31 List: näide >>> yks_list = [1,2,3] >>> yks_list [1, 2, 3] >>> yks_list.append("joru") >>> yks_list [1, 2, 3, 'joru'] >>> yks_list.insert(1,"toru") >>> yks_list [1, 'toru', 2, 3, 'joru'] >>> del yks_list[1] >>> yks_list [1, 2, 3, 'joru'] >>> yks_list[2] 3 >>> yks_list[2:] [3, 'joru'] >>> yks_list[:2] [1, 2] >>>

32 Ennik Et misasja...? Eestikeelne uudisvaste ingliskeelsele sõnale tuple Pythoni kontekstis võiks mõista kui massiivi- või kirjetüüpi konstanti – peale defineerimist enam muuta ei saa: >>> yks_ennik = (1,2,3,4,5) >>> yks_ennik (1, 2, 3, 4, 5) >>>

33 Sõnastik võtme ja väärtuse paaridest moodustatud massiivisarnane tüüp: >>> isik = {'nimi': 'Jyri', 'vanus': 23, 'pikkus': 182, 'jalanumber': 43} >>> print isik {'nimi': 'Jyri', 'jalanumber': 43, 'vanus': 23, 'pikkus': 182} >>> print isik['nimi'] Jyri >>>

34 ... Väärtuse muutmiseks tuleb talle lihtsalt anda uus väärtus, uue võtme lisamiseks tuleb defineerida uus võtme-väärtuse paar: >>> isik['jalanumber'] = 45 >>> print isik {'nimi': 'Jyri', 'jalanumber': 45, 'vanus': 23, 'pikkus': 182} >>> isik['kaal'] = 86 >>> print isik {'kaal': 86, 'nimi': 'Jyri', 'jalanumber': 45, 'vanus': 23, 'pikkus': 182} >>>

35 ... Sõnastikust eemaldamine käib nagu listiski del- funktsiooniga. Lisaks saab kasutada ka tühjendusfunktsiooni clear, mis kogu sõnastiku tühjendab: >>> print isik {'kaal': 86, 'nimi': 'Jyri', 'jalanumber': 45, 'vanus': 23, 'pikkus': 182} >>> del isik['kaal'] >>> print isik {'nimi': 'Jyri', 'jalanumber': 45, 'vanus': 23, 'pikkus': 182} >>> isik.clear() >>> print isik {} >>>

36 Valik Tavaline IF: soov = "Elevant" pakkumine = raw_input ("Mis looma sa müüd? ") if pakkumine == soov: print "Jaa, selle ostan kohe ära!" else: print "Päh, seda küll ei taha!" paar olulist punkti: a) nagu juba mainitud – programmiplokke tähistatakse treppimise ehk nihke abil b) tervikut moodustavate juhtlausete (if ... else) järel on koolon

37 ... Case/switch -mitmendvalik Pythonis puudub, küll aga saab kasutada PHP-ski nähtud elseif-osa (Pythonis kujul elif): soov = "Elevant" pakkumine = raw_input ("Mis looma sa müüd? ") if pakkumine == soov: print "Jaa, selle ostan kohe ära!" elif pakkumine == "Skunks": print "Wäääkkk!! Korista end siit koos tolle haisukotiga!" else: print "Päh, seda küll ei taha!“

38 Kordus Pythonis on olemas eelkontrolliga kordus (while) ja fikseeritud kordus (for) – puudub do-while tüüpi järelkontrolliga kordusetüüp Ka korduse juures antakse tsükliskoopi edasi treppimisega: print "Loeme numbreid:" while i<=5: print i i=i+1 print "Ongi loetud!"

39 ... Huvitaval kombel kasutatakse Pythonis while- tsüklis ka else-klauslit – see täidetakse viimase lausena enne tsükli töö lõppu: print "Loeme numbreid:" while i<=5: print i i=i++ else: print "Ongi loetud!"

40 ... For-tsükkel on mõnevõrra teistsugune kui mujal, nimelt kasutatakse seda siin pigem massiivi läbimiseks (PHP foreach): loomad = ['koer', 'kass', 'rott', 'jõehobu'] for loom in loomad: print loom else: print "Loomi polegi!" Tsüklist väljumiseks ja uue kordustakti alustamiseks on nagu PHP-s break ja continue, mida kasutatakse samamoodi

41 Lõpetuseks Eelnev oli nii Zope'i kui Pythoni väga pinnapealne tutvustus Ka Zope ja Python oleks üks võimalus oma ainesisese rakenduse loomiseks! Proovige Zope'i või installige oma masinasse. Kõige lihtsam on seda teha Linuxis – Ubuntul on Python 2.7 kaasas ja Zope 2.10, 2.11 ja 3 paigaldatavad otse varamutest (N: sudo apt-get install zope3)

42 Tänaseks kõik...


Alla laadida ppt "Veebitehnoloogiad IV: Zope, Plone, Python"

Seotud esitlused


Google'i reklaam