2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute.

Relaterede dokumenter
klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

CGI og dynamiske web-sider. Uge 48 W. J. Chun: Core Python programming, kap Kompendium.

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

CGI og dynamiske web-sider. Uge 47 W. J. Chun: Core Python programming, kap Kompendium.

Region Syddanmark Guide til oprettelse og udsendelse af nyhedsbreve i Peytz Mail

Modul 16, Word 5 Felter, tabeller og breve

xgalleri Mulige filtyper Installation web-version

Oktober Dokumentpakker

Lav din egen forside i webtrees

Quick guide Dynamicweb 9. Kom godt i gang med brugen af redigeringsværktøjet bag vores hjemmesideløsning CMS-systemet Dynamicweb

Kom godt i gang med Fable-robotten

Dokumentering af umbraco artikeleksport:

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Sådan opretter du en elektronisk aflevering

Fable Kom godt i gang

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

Kom godt i gang med I-bogen

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Patientlister. Tilføj / rediger eksisterende lister. VEJLEDNING Patientlister

Manual Serif Web & Tableau Public

Umbraco installationsvejledning

Tagwall med Php & MySQL

Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Kort brugermanual til Spirometry PC Software

Villys Studiekreds Præsentation af slægten på en hjemmeside.

Vejledning til datatræk i Novax på ICPC-koder

Nyt i Analyseportalen og Web Report Studio. Analyseportalen

Loginsystem (med MySQL)

UPLOAD. Af Database og Website til Skolens Server

Søgning på patienter med kræft

UC Syddanmark

Kom godt i gang med Fronter

Manual til udvidet abonnement

Administration af subsites BRUGERVEJLEDNING FOR ADMINISTRATOREN

FORCE Inspect Online Manual v FORCE Inspect Online Manual. 1 af 18

Brugervejledning til databrowseren

Fable Kom godt i gang

Opsætning af brugere og temaer i GIS4Mobile

Når du har logget dig ind, ser du Randers Kommunes byvåben midt på siden. I venstre side er der en række mapper:

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Astronomidata med SIMBAD. At hente og anvende data fra Internettet til at datere Hyaderne.

Vejledning til datatræk i Novax på ICPC-koder (eksempel stress)

Det Naturvidenskabelige Fakultet. Introduktion til Blackboard (Øvelser) Naturvidenskabeligt Projekt 2006 Prøv at forske

Web sider. Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det?

Rapport generator til Microsoft C5

Modul 14, Word 3. Ret eksisterende dokument 1

POST IT! Cph Business Academy Multimediedesign 2. Semester flow april Kirstine Marie Rasmussen cph-

DANSK SKOLEDATA APS. Tlf DSA-Ventelisten

Herning Bibliotekernes Helpdesk

[jobsøgende] sådan gør du... [søg job via jobnet.dk]

Tastemanual til Webbyggeren

EVALUERING I SURVEYXACT TRIN FOR TRIN

Daglig brug af JitBesked 2.0

Uploade billeder eller andre filer ved hjælp af php og mysql

Afsending af s vha. ASP

Adobe Acrobat Connect brugergrænsefladen

Brugervejledning til AIM spørgeskemaer

GUIDE TIL OPRETTELSE AF SIDER OG INDHOLD I UMBRACO ONLINE BETJENING

Netværk & elektronik

elib Aleph, ver.18 Introduktion til GUI FUJITSU SERVICES A/S

WELLPLOT ARCGIS BRUGERMANUAL I G I S A P S

SIDEN PÅ WORDPRESS.COM

Modul 2 - Computerens drev og tekstbehandling. Computerens netværksdrev og mappen dokumenter

Quick guide til e-learn.sdu.dk (Blackboard) for studerende

Manual for redaktører

Miniguide for redaktører. Miniguide for redaktører. Leveret af DFF-EDB.dk

Download. Information: Du kan downloade filer på følgende måder:

Manual til ECOonline

Indholdsfortegnelse. Login 1. Glemt password 2. Ændre personlige oplysninger 2. Min side 3. Global meldingsboks 5. Administrerede sager 7

Vejledning til Blackboards portfolio værktøj

NVF hjemmesiden Vejledning for indlægning af materiale

18/ Version 2.0 Side 1 af 36

09/ Version 1.4 Side 1 af 37

Introduktion til Indholdsredigering

Vejledning til. LearnSpace

AARHUS AU UNIVERSITET BLACKBOARD QUICK GUIDE TIL UNDERVISERE PÅ HEALTH OG SCIENCE & TECHNOLOGY

bedreweb.dk - Bolette Obbekær 2012 SÅDAN LÆGGER DU WORDPRESS PÅ DIT WEBHOTEL

Kl. mikrobiologisk afdeling Side 1 af 15 Hvidovre Hospital vers.1.6

dpix til Word Indholdsfortegnelse

Pia Schiermer, Underviser ved UNI-C og Vestsjællands Amtscenter 2/19

DDElibra H Å N D B O G

midi2style - program for konvertering af MIDI-filer til YAMAHA PSR stylefiler

Sådan kommer du nemt i gang med Joomla!

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Indhold. Evalueringsvejledning. En undersøgelse fra start til slut involverer 4 programmer: - SurveyXact - Excel - E-learn - SiteCore

DM507 Algoritmer og datastrukturer

Manual til Dynamicweb Februar 2010

Login. I denne lille folder beskrives nogle af de vigtigste funktoner i ForældreIntra:

BRUGERVEJLEDNING. Til klinikker og brugere i voresklinik.info

BRUGER KURSUS RAMBØLL HJEMMESIDE

IDAP manual Emission

Upload af billeder til hjemmesiden m.m.

EVALUERING I SURVEYXACT TRIN FOR TRIN

Database for udviklere. Jan Lund Madsen PBS10107

Transkript:

Øvelse 10. Dynamiske web-sider og cgi-modulet I denne opgave skal vi bygge de foregående opgaver sammen til en mini-udgave af det samlede system I skal aflevere til vintereksamen. I får udleveret et lille system som I skal placere på jeres webpages-server. Systemet benytter sig af den database I lavede i øvelse 7.1 samt af det modul I færdiggjorde i øvelse 9. I kan se hvordan systemet kører på denne adresse: http://pba.web.student.hum.au.dk/opgave10/frontpage.htm Selve systemet kan downloades fra kursussiden under navnet opgave10. Det en en zip-file. Pak zipfilen ud, læg modulerne i en mappe på jeres webpages, og få det til at køre. 1. Når I lægger filerne over på jeres web-pages, skal de ligge som ascii-filer. Derfor skal I bruge Filezilla-programmet til at flytte dem. I Filezilla sætter I filetransfer til at være ascii ved under settings ASCII/Binary, at indføre py som suffix og sætte den på autodetect. Så lægger Filezilla dem korrekt over. 2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute. I kender nogle af filerne i forvejen. Det gælder database som I arbejdede med i øvelse 6 og OOogsql som I arbejdede med I øvelse 9. htmlroutines indeholder to funktioner som laver html-tabeller. Den ene arbejdede I med i øvelse 5. Øvelsen går ud på at læse dynamicwebpages, searchresult og findresult og finde ud af hvordan de virker, samt at gennemskue hvordan de forskellige moduler virker sammen. Meningen er at I skal tilpasse opgave10 til det projekt I afleverer til vintereksamen. Her er en kortfattet overordnet beskrivelse af systemet. Opbygningen af systemet dynamicwebpages indeholder klasser der repræsenterer de dynamiske websider der er i systemet. Fig. 1 viser et klassediagram over disse web-sider. Alle sider er færdi-

ge undtagen én. Det er siden actionresult der skal genereres af et pyton-program. I stedet går linket til siden actionresult.py der blot fremviser indholdet af variablen fieldstorage, der indeholder de data som pyton modtager. 2! Fig. 1. Klassediagram I diagrammet har jeg brugt følgende den konvention at almindelige linkadresser repræsenteres som egenskaber, mens knapper der er indlejret i en form, repræsenteres som metoder. Vi ser at alle klasser har links til frontpage, search og findone. Det er de links I kan se til venstre i skærmbilledet. De går igen på alle siderne. Find barn, Ret barn og Udmeld barn linker alle til FindOne. Det er fordi vi først må fiske barnet frem før vi kan rette eller udmelde det, men hvis vi kun havde et link med navnet Find Barn i menuen, så ville en person, der ønsker at udmelde barnet, ikke vide hvad han skulle gøre. 2. Skærmbillede

Web-siderne er et mix af håndlavede (fuldt optrukne i diagrammet) og dynamisk genererede (stiplede) sider. Frontpage, search og findone er håndlavede, mens searchresult, findresult og actionresult genereres af Python-programmer. Reglen jer har fulgt er, at alle sider, der modtager information fra web-klienten og fremfinder ting fra databasen, er dynamiske. Når man vil sende information til Python sker det ved felter og knapper der findes indeni et form-tag. Submit-knapperne Ret og Udmeld samt den efterfølgende tekstbox er indlejeret i et form-tag. 3 Fig. 3. Hvordan en form ser ud på skærmbilledet Når man trykker på udmeld, viser næste webside hvad fieldstorage indeholder. Den har attributten Remove hvis værdi er udmeld samt attributten cpr hvis værdi er 1111111111. Pyton kan nu nemt fiske den oversendte information frem. Hvis vi har lagt vores FieldStorage i variablen storagecontents (storagecontents = cgi.fieldstorage()), så kan vi fiske indholdet frem således: Cpr = storagecontents['cpr'].value Vi opnåede at FieldStorage fik dette indhold med følgende html-kode: <form name="form1" method="post" action="actionresult.py"> <p> <input type="submit" name="edit" value="ret"> <input type="submit" name="remove" value="udmeld"> <input type="text" name="cpr" value = 1111111111> </p> </form> Vi ser at Value er det navn, elementet fremvises under på web-siden, eller indeholdet af en textbox, mens Name er det navn data sendes til pyton under. Navnet på det pyton-program, der skal kaldes når vi trykker på en knap, specificeres i det første form-tag. I eksemplet ovenfor er det actionresult.py: <form name="form1" method="post" action="actionresult.py"> I diagrammet i fig. 1 har jeg brugt en association til at angive hvilke pytonprogrammer, en submit-knap aktiverer. De pyton-programmer der kaldes via cgi skal opfylde følgende: 1. Programmet skal starte med #!/usr/bin/pyton Det fortæller serveren hvor den skal finde pyton-fortolkeren. 2. Alle moduler skal importere cgi modulet: import cgi

4 3. Hvis man vil have pyton til at skrive fejlmeddelelser tilbage skal man skrive import cgi, os, cgitb cgitb.enable() Ellers får man bare en intetsigende side tilbage i hovedet. Jeg har forsøgt at konstruere modulerne så hvert modul kun har ét emne og kun ét ansvarsområde: findresult og searchresult frembringer svar på en søgning. Den første forudsætter at der højst er ét svar, den sidste kan frembringe flere svar. DynamicWebpages repræsenterer alle de dynamiske sider i systemet som klasser. Klasserne indeholder metoder for at få fat i data den modtager fra en klient, til at bede sql-modulet om at lave databasekald og til at fremvise sig selv som en webside. findresult-programmet laver en instans af klassen FindResult, og searchresult af klassen SearchResult. Dernæst printer de klassernes selv-fremvisning: test = SearchResult(beginning,ending,message,title) print test.makedynamicpage() Den printede html-kode sendes ikke til nogen printer eller konsol, men returneres til serveren, der sender den tilbage til klienten. Parametrene beginning, ending, message, og title indeholder følgende: Beginning: den html-kode der er fælles for starten af alle siderne. Ending: den html-kode der er fælles for slutningen af alle siderne. Message: overskriften på højre side af skærmbilledet der varierer fra side til side Title: titlen som web-siden der varierer fra side til side. Beginning og Ending er globale variable, der udfyldes af modulet dynamicwebpages. Som vist i fig. 4, er modulerne niveaudelt: de øvre moduler bruger de nedre, men ikke omvendt. Dette anses for godt design, fordi man så let kan tilføje moduler i den øvre ende uden at skulle rette på de nedre moduler. F.eks. er det nemt at tilføje flere web-sider på toppen.

5 Fig. 4. Modulerne Modulet sql bruges f.eks. af dynamicwebpages. F.eks. skal klassen FindResult returnere den række i databasen Child, der har et bestemt cpr-nummer. Det gør den ved at generere et objekt af typen sql.row med cpr som parameter for en primærnøgle: self.results = sql.row('child',self.cpr) dynamicwebpages beskæftiger sig altså ikke med databasekald og den slags slibrigheder. Det har den folk til. Dens ansvarsområde ligger udelukkende i at lave dynamiske sider, og databasekald har den delegeret til modulet sql. HTMLroutines er specialiseret i at omdanne Pytons listestrukturer til htmltabeller. Disse metoder kaldes af sql-modulets klasser for at de kan visualisere sig selv som html-tabeller. Design og fejlretning af dynamiske hjemmesider Husk allerførst, at alle sider der sendes tilbage til klienten skal starte med følgende: Content-type: text/html efterfulgt af et linjeskift. Dette fortæller klienten hvad der er for et dokument den modtager.

Når man laver et system, gælder det om at fejl-rette modul for modul. Man sørger for at de nedre moduler fungerer før man lader de øvre moduler bruge dem. Det kan man gøre efter konstruktionen if name == " main ": Den kode der står efter linjen bliver udført når programmet køres selvstændigt, men ikke når det køres som modul der importeres af et andet program. Man kan se et eksempel fra sql-modulet: if name == " main ": print 'make a table-object and print it' atable = Table('Child') atable.printcontents() print print 'fetch a row from Child with primary key 1111111111' arow = Row('Child','1111111111') print 'change the first name to Jeppe and store it' arow.put('firstname','jeppe') arow.update() Her testes Table og Row før dynamicwebpages får lov til at bruge disse klasser. Når man udformer dynamiske hjemmesider, er der to gode tricks: 1. Lav først siden i hånden i DreamWeaver. Her kan I kæle for design og layout uden at kunne en linje html. Selekter dernæst i det nederste vindue den del som afhænger af modtaget information og databasekald. Kopier den selekterede htmlkoden ud af det øverste vindue og kig på den. Det er denne kode I skal få et Pytonprogram til at generere. Kopier dernæst den foregående html-kode og læg den ind i en variabel (f.eks. beginning som gjort ovenfor). Kopier den efterfølgende kode og læg den ind i en variable (f.eks. ending som gjort ovenfor). 6 Fig. 5. Opmærkning i DreamWeaver.

Hvis funktionen getresults() laver den html-del der fremviser resultater, kan selve siden, thepage, fremstilles ved følgende to linjer: thepage = '''Content-type: text/html ''' thepage += self.beginning + self.getresults()+ self.ending 2. Hvis I ikke lige har styr på hvad det egentlig er for ting der modtages gennem FieldStorage, kan I starte med at lade action-delen kalde siden testresults.py. Denne side gør ikke andet end at udskrive indholdet af FieldStorage. Hvis vi f.eks. lader siden Search kalde testresults.py får vi følgende svar: 7 Fig. 6. Fremvisning af FieldStorage. Den viser øverst hvilke attributter og værdier FieldStorage indeholder. Der er f.eks. et attribut Fornavn med værdien peter. Nederst kan man se et råt udprint af FieldStorage.