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

Relaterede dokumenter
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.

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

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

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

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

Dokumentering af umbraco artikeleksport:

UPLOAD. Af Database og Website til Skolens Server

xgalleri Mulige filtyper Installation web-version

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

Umbraco installationsvejledning

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

Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Opsætning af brugere og temaer i GIS4Mobile

Kort brugermanual til Spirometry PC Software

Vejledning til Kilometer Registrering

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

Sådan opretter du en elektronisk aflevering

Oktober Dokumentpakker

Kom godt i gang med I-bogen

Rapport generator til Microsoft C5

Tagwall med Php & MySQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

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

Lav din egen forside i webtrees

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

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

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

Kom godt i gang med Fable-robotten

UC Syddanmark

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

Fable Kom godt i gang

En Kort Introduktion til Oracle

Søgning på patienter med kræft

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:

Nyt i Analyseportalen og Web Report Studio. Analyseportalen

Netværk & elektronik

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

09/ Version 1.4 Side 1 af 37

BRUGERVEJLEDNING. Til klinikker og brugere i voresklinik.info

Modul 16, Word 5 Felter, tabeller og breve

Indholdsfortegnelse. BUANCO Kort layout C8win

Sådan kan du sende data fra din egen hjemmeside til JitBesked via en HTML-JDF.

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

Brugervejledning til databrowseren

Administration af subsites BRUGERVEJLEDNING FOR ADMINISTRATOREN

EVALUERING I SURVEYXACT TRIN FOR TRIN

SIDEN PÅ WORDPRESS.COM

Brugermanual PoP3 og Outlook Office 2003 Webmail Udarbejdet af IT-afdelingen 2005

Karens lille vejledning til Access

Manual til ECOonline

The Design Diaries Project 3 2. Semester. Blog om designprincipper

2) OVERVEJE hvordan dine træningsdata skal overføres til dagbogen.

vejman.dk Brugerdokumentation - kortmodul 14. marts 2012 Version 1.9

FTP-guide. Import og eksport af Engrosdata. 27. marts 2015 XSTJ. Projekt Version Dato Forfatter FTP-guide XSTJ

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

Brugernavnet og kodeordet til databasen kan du evt. finde i /webtrees/data/config.ini.php

Herning Bibliotekernes Helpdesk

INSTALLATIONSVEJLEDNING

Manual Serif Web & Tableau Public

Kom godt i gang med Fronter

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

Få din hjemmeside på internettet

18/ Version 2.0 Side 1 af 36

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

Vejledning. Indlæsning af studerende til gruppedannelse i STADS. Indhold. Studie-IT Tlf.:

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

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

APV Transport quick-guide

Gæstebog med validering opbygget med MySQL

Opret ODBC datakilde Vejledning

Video obligatorisk øvelse

DANSK SKOLEDATA APS. Tlf DSA-Ventelisten

Indhold VDI... 1 Installer fra UCL programmer... 2 Installer fra web... 7 Kør fra browser... 16

EVALUERING I SURVEYXACT TRIN FOR TRIN

Fable Kom godt i gang

Kom i gang med Course Tool 1.2

Daglig brug af JitBesked 2.0

GUIDE TIL OPRETTELSE AF SIDER OG INDHOLD I UMBRACO ONLINE BETJENING

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

Manual for redaktører

Indledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.

Tegneserien - Kom godt i gang. Mikro Værkstedet A/S

Transkript:

Øvelse 12. Dynamiske web-sider og cgi-modulet Teori: CGI Øvelse: anvendelse af 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. klient Forespørgsel/ Nye data Webside Python program Database kommando svar Database I får udleveret et lille system som I skal placere på udviklingsserveren. Systemet benytter sig af den database I lavede 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 opgave 12 system. Det er en zip-file. Pak zipfilen ud, læg modulerne i en mappe på jeres del af udviklingsserveren, og få det til at køre. 1. Når I lægger filerne over på serveren, skal de ligge som ascii-filer. Derfor skal I bruge Filezilla-programmet til at flytte dem. I Filezilla sætter I transfertype til at være ascii under Overfør. 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. 3. De tre boxe øverst i Filezilla skal udfyldes således (xxx er jeres brugernavn): Vært = xxx.web.student.hum.au.dk, Brugernavn = xxx@web, og Kodeord er jeres kodeord. I kender nogle af filerne i forvejen. Det gælder database som I arbejdede med i øvelse 7 og OOogsql som I arbejdede med I øvelse 11. htmlroutines indeholder to funktioner som laver html-tabeller. Den ene arbejdede I med i øvelse 6. Ø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 opgave 12 til det projekt I afleverer til vintereksamen. Her er en kortfattet overordnet beskrivelse af systemet.

2 Opbygningen af systemet dynamicwebpages indeholder klasser der repræsenterer de dynamiske websider der er i systemet. Fig. 1 viser et klassediagram over dem. WebPage -beginning -ending -message -storagecontents +getstoragecontents() +getresults() +displayresults() +makedynamicpage() SearchResult ResultPage +init() +getresults() +displayresults() +init() FindResult Søger efter navn og adresse Fremviser resultatet i en vertikal tabel +init() +getresults() +displayresults() Søger efter cpr Fremviser resultatet i en horizontal tabel Fig. 1. Klassediagram. Html-siderne Search og FindOne kalder pyton-filerne searchresult.py og findresult.py, respektive. Disse sider genererer objekter af klasserne SearchResult og FindResult, respektive. Forsiden ser således ud:

3 2. Skærmbillede Web-siderne er et mix af håndlavede og dynamisk genererede sider. Frontpage, search og findone er håndlavede, mens de resterende genereres af Pythonprogrammer. Reglen jeg har fulgt er, at alle sider, der modtager information fra webklienten 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. 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>

4 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"> 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 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 findresult searchresult DynamicWebPages cgi sql htmlroutines database MySQLdb 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.