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

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

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

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

Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Kom i gang med SAS STPbaserede

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

De skjulte input typer:

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

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

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

Netværk & elektronik

PHP Crash course. Databaser

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Introduktion til programmering. UML, Uge 45 Computer science, kap 7, særl. 7.4 og 7.5. Martin Fowler: UML distilled, kap. 3. Addision-Wesley, 2004.

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

HTML, PHP, SQL, webserver, hvad er hvad??

Klasser og Objekter i Python. Uge 11

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

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

Lær Python - Dag 4, modul 1 Objektorienteret programmering

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

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Reeksamen, DSDS, forår 2008

Ratingsystem i PHP og MySQL

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

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Web 2.0. World Wide Web (www)

Design Diaries.

Dokumentering af umbraco artikeleksport:

Byggebasen Javascript

The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family.

Ordbøgerne.dk. Navne: Andreas Foldager og Rasmus Bjerring Pedersen Fag: IT B Lærer: Karl Bjarnason Afleveringsdato:

Det er muligt at chekce følgende opg. i CodeJudge: og

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

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

PROJEKT 3. The Design Diaries. LINK TIL BLOG: Af Mikkel Borg Svendsen & Sebastian Frank MUL B

Eksamen, DSDS, efterår 2008

User Manual for LTC IGNOU

Analyse, problemområde, anvendelsesområde

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

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

It og informationssøgning Forelæsning november 2006 Jakob Grue Simonsen. Hypertekst og Python. Andersen & Simonsen: kap. 12

Aarhus Universitet, Science and Technology, Computer Science. Mock Exam. Wednesday 27 June 2018, 9:00-11:00

Eksamen, DSDS, forår 2009

The Design Diaries. Link til blog

Løsning af skyline-problemet

ISA Server 2006 Del 5. Jesper Hanno Hansen

Interaktionsudvikling

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Form og dens underlige box model

Lær Python - Dag 4, modul 2 Objektorienteret programmering

3. PROJEKT, 2 SEMESTER

ODS measured tagset til RTF er smart og kan tilpasses

En Kort Introduktion til Oracle

Afsending af s vha. ASP

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Databaseadgang fra Java

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Dynamisk PHP design OPDATERET

ArbejsskadeAnmeldelse

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011

I denne arktikle går jeg gennem Slet, Ret og Opret data i en MySQL database. der er også en lille del i den hvor den postere datanen ud i en løkke

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension

CHAPTER 8: USING OBJECTS

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Eksamen, DSDS, efterår 2007

Rapport. Udarbejdet af: Mayianne Nøks Pedersen. Skole login: knmape68.

PHP guide af Daniel Pedersen

Indhold. Senest opdateret : 30. juli Side 1 af 5

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Eksamen, DSDS, forår 2008

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Webside score digitalenvelopes.

Tredjepart webservices

MultiProgrammer Manual

Gæstebog med validering opbygget med MySQL

Indhold. Senest opdateret:03. september Side 1 af 8

Digitaliseringsstyrelsen

StarWars-videointro. Start din video på den nørdede måde! Version: August 2012

Tagwall med Php & MySQL

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

Web- og serverprogrammering

Splunk Cookbook Lab Workshop

Anvendelse af Model- View koncept i SAS Stored Processer

Hvordan vælger jeg dokumentprofilen?

Introduktion til funktioner, moduler og scopes i Python

1 Domæne Design valg User Klassediagran 5

Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov.

FBS for praktikere Fyn. Notifikation og print skabeloner

Matematik læringsprojekt Journal

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

Eksamens rapport Informationsteknologi B

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Begrynder til at lave log ind system

Da beskrivelserne i danzig Profile Specification ikke er fuldt færdige, foreslås:

Transkript:

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

I mål - næsten! Database Python - Webklient

Men først den mislykkede standup Skulle illustrere genbrug af designmønstre Jeg have lavet udskriftfunktionerne dumt.

Samlingsmønstret Rekursiv definition Samling ::= {Del}* Del ::= Simpel Samling Samling Del Del Samling Del Del

Specialisering af mønstret til beskrivelse af organisation Nye attributter Nye attributter Nye metoder Omdefinerede funktioner

Organisation class Organisation(Samling: def init (self, navn, adresse, leder, dele = None: Samling. init (self, navn, dele self.adresse = adresse self.leder = leder def ansaetleder(self,enansat: self.leder = enansat def fyrleder(self,enansat: self.leder = None def str (self, niveau = 1: text = '\n' + niveau *' '+'(' + self.navn text += '\n' + (niveau+1 *' '+ 'Leder: ' + self.leder. str (niveau+1 text += '\n' + (niveau+1 *' '+ 'Dele: ' if self.dele!= []: for endel in self.dele: text += endel. str (niveau+1 else: text += 'no parts' text += '\n' + niveau *' '+'' return text

Ansat class Ansat(Simpel: def init (self, navn, adresse, konto: Simpel. init (self, navn self.adresse = adresse self.konto = konto def str (self,niveau: text = '\n' + niveau *' '+'(' + self.navn text += '\n' + (niveau+1 *' '+ 'Adresse:' + self.adresse text += '\n' + (niveau+1 *' '+ 'Konto:' + self.konto text += '\n' + niveau *' '+'' return text

Kørsel #lav ledere steffen = Ansat('Steffen Brandorff','Horsens', '65656565' daimileder = Ansat('Kurt Jensen','Aarhus','545454' bodil = Ansat('Bodil Due','Vestergade 20', '32323232' natdekan = Ansat('Erik Meineche Schmidt','Aarhus','363636' sunddekan = Ansat('En eller anden','aarhus','et eller andet' rektor = Ansat('Lauritz B. Holm-Nielsen','Aarhus', '543636' #lav organisationer universitet = Organisation('Aarhus universitet','aarhus', rektor humaniora = Organisation('Humaniora', 'Nobelparken',bodil naturvidenskab = Organisation('Naturvidenskab', 'Ny Munkegade',natdekan sundvidenskab = Organisation('Sundhedsvidenskab', 'Bartolinsgade',sunddekan imv = Organisation('Imv','Helsingforsgade',steffen daimi = Organisation('Daimi','Aabogade',daimileder #tilfoej dele af organisationerne universitet.tilfoej(humaniora universitet.tilfoej(naturvidenskab universitet.tilfoej(sundvidenskab humaniora.tilfoej(imv naturvidenskab.tilfoej(daimi imv.tilfoej(claus imv.tilfoej(peter imv.tilfoej(steffen daimi.tilfoej(daimileder daimi.tilfoej(natdekan print universitet #lav ansatte claus = Ansat('Claus bossen','aarhus','6456445' peter = Ansat('Peter Bøgh Andersen','Rønde','4343434'

Output (Aarhus universitet Leder: (Lauritz B. Holm-Nielsen Adresse:Aarhus Konto:543636 Dele: (Humaniora Leder: (Bodil Due Adresse:Vestergade 20 Konto:32323232 Dele: (Imv Leder: (Steffen Brandorff Adresse:Horsens Konto:65656565 Dele: (Claus bossen Adresse:Aarhus Konto:6456445 (Peter Bøgh Andersen Adresse:Rønde Konto:4343434 (Steffen Brandorff Adresse:Horsens Konto:65656565 (Naturvidenskab Leder: (Erik Meineche Schmidt Adresse:Aarhus Konto:363636 Dele: (Daimi Leder: (Kurt Jensen Adresse:Aarhus Konto:545454 Dele: (Kurt Jensen Adresse:Aarhus Konto:545454 (Erik Meineche Schmidt Adresse:Aarhus Konto:363636 (Sundhedsvidenskab Leder: (En eller anden Adresse:Aarhus Konto:et eller andet Dele: no parts

De nye metoder humaniora.fyrleder(bodil humaniora.ansaetleder(steffen print humaniora (Humaniora Leder: (Steffen Brandorff Adresse:Horsens Konto:65656565 Dele: (Imv Leder: (Steffen Brandorff Adresse:Horsens Konto:65656565 Dele: (Claus bossen Adresse:Aarhus Konto:6456445 (Peter Bøgh Andersen Adresse:Rønde Konto:4343434 (Steffen Brandorff Adresse:Horsens Konto:65656565

CGI Common Gateway Interface Måde at afvikle programmer på serveren, hvor resultatet sendes tilbage til klienten (browseren Kræver at webserveren er sat op korrekt Alle programmeringssprog kan benyttes Mest kendt: Perl, Python

Afsendelse af meddelelser fra klient til server http://servernummer/pythonprogram? navn = værdi & navn = værdi http://www.sysiac.org/?pageid=16 http://www.google.dk/search? hl=da& q=cgi& btng=google-s%c3%b8gning& meta=

Dataflow

Forms <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> Knapper (type submit. Name = det navn hvorunder data modtages af serveren, Value = den måde knappen fremvises på i klienten Felter (type text. Name = navnet på feltet, value = de data feltet indeholder. Method: den http kommando der skal bruges. Get/Post: videresender data på forskellig måde Action: det program der skal køres via cgi-protokollen

Test af cgi

Illustrerer http://imv.au.dk/~pba/homepagemateri al/programmeringsmateriale06/testside.htm Felter, menuer, radioknapper, checkboxe, upload of texter

HTML-koden Starten på form Text felt Menu Check box <form action="http://pba.web.student.hum.au.dk/fritidsordning/testresults.py" method="post" enctype="multipart/form-data" name="form1"> <p> <strong>name</strong> <input type="text" name="name"> <strong> </strong> <strong>address</strong> <input type="text" name="address"> </p> <p> <strong>choose color</strong> <select name="colorchoice"> <option value="green">green</option> <option value="blue">blue</option> <option value="red">red</option> </select> <strong> </strong> <strong>are you happy?</strong> <input type="checkbox" name="happy" value="true"> </p> <p>

HTML-koden Radio knapper Menu <label> <input type="radio" name="choose dish" value="fish"> Fish</label> <br> <label> <input type="radio" name="choose dish" value="meat"> Meat</label> <br> <label> <input type="radio" name="choose dish" value="bread"> Bread</label> </p> <h4>what do you want to do? <select name="task"> <option value="eat">eat dinner</option> <option value="sleep">go to sleep</option> <option value="work">go to work</option> </select> <br> </h4> <p> <input type="file" name="file"> </p> <p> <input name="postit" type="submit" id="postit" value="post http request"> </p> </form>

Test af cgi

FieldStorage storagecontents = cgi.fieldstorage( Kan behandles som en slags dictionary If address in astorage.keys: Addressen = astorage[ address ].value

Brug af testresults.py <form action=http://pba.web.student.hum.au.dk/fritidsordning/testresults.py method="post" enctype="multipart/form-data" name="form1"> Action = URL URL en refererer til dette Python-program der skal behandle de data form en sender til serveren. Brug af testresults.py Lav URL en om så den passer med jeres plads på serveren Læg python-programmet testresult.py over på jeres plads på serveren eller Brug brug det eksemplar der ligger på min serverplads Start med at lade alle sider aktivere testresult.py Så kan I se præcis hvilke data der fremsendes.

Gennemgang af eksempelsystemet

findresult.py Laver et objekt af klassen FindResult og printer den som htmltabel <form name="form1" method="post" action="findresult.py"> <p>cpr <input type="text" name="cpr"> </p> <p> <input type="submit" name="find" value="find"> </p> </form> Data sendt: cpr = 1111111 & find = find FindResult.py #!/usr/bin/python from dynamicwebpages import * if name == " main ": message = 'Foelgende barn blev fundet' title = 'Vis resultat' test = FindResult(beginning,ending,message,title print test.makedynamicpage( Placeringen af Python fortolkeren

Resultat

test = FindResult(beginning,ending,message,title

Hvordan sker det? def init (self, beginning, ending, message,title: ResultPage. init (self, beginning, ending, message,title self.results = self.getresults(

Hvordan sker det? def init (self, beginning, ending, message,title: self.beginning = beginning.replace('#message',message,1 self.beginning = self.beginning.replace('#title',title,1 self.ending = ending self.message = message self.storagecontents = cgi.fieldstorage(

Hvordan sker det? Har ingen anelse om hvad der sker

Hvordan sker det? class FindResult(ResultPage: def init (self, beginning, ending, message,title: ResultPage. init (self, beginning, ending, message,title self.results = self.getresults( def getresults(self: if 'Find' in self.storagecontents.keys(and 'Cpr' in self.storagecontents.keys(: self.cpr = self.storagecontents['cpr'].value self.results = sql.row('child',self.cpr else: self.results = None return self.displayresults(

Hvordan sker det? def init (self, tablename, key='': Persistent. init (self,tablename, None if key!= '': #insert the table row self.values = database.findrecords(tablename,[],{self.primarykey:key}

Hvordan sker det? def init (self, tablename, key='': Persistent. init (self,tablename, None if key!= '': #insert the table row self.values = database.findrecords(tablename,[],{self.primarykey:key}

Hvordan sker det? def displayresults(self: if self.results!= None: if self.results.empty == False: thetable = self.results.makehorizontaltable(

Hvordan sker det? def makehorizontaltable(self: return htmlroutines.makehorizontaltable(self.combinecolumnnamesandvalues(

Hvordan sker det? def makehorizontaltable(tablecontents: htmltabel = '<table width="75%" border="1">\n' entries = tablecontents[0] for row in range(len(entries: htmltabel += makehorizontalrow(row,tablecontents htmltabel += '</table>\n' return htmltabel

Hvordan sker det?

Hvordan sker det? def makedynamicpage(self: #make the header thepage = '''Content-type: text/html ''' #make the whole page consisting of beginning, results and ending thepage += self.beginning + self.getresults(+ self.ending return thepage

Summarummarum: Webpages!"

Klassen Webpage class WebPage: '''This class is an abstract class and not intended for generating instances. However, it can be used as a dummy that is later replaced by its subclasses'' def init (self, beginning, ending, message,title: # #message and #title is placeholders in the html-string #they are replaced by the contents of the variables message and title self.beginning = beginning.replace('#message',message,1 self.beginning = self.beginning.replace('#title',title,1 self.ending = ending self.message = message Her fisker vi FieldStorage ud af cgi self.storagecontents = cgi.fieldstorage( modulet def getstoragecontents(self: #gets the information sent from a form return self.storagecontents def getresults(self: #default function. Returns a table of the information sent from a form #Its subclasses make database access and return the results #in tabular form return self.displayresults(self.storagecontents

Klassen Webpage def displayresults(self,astorage: '''Input: a fieldstorage object Returns a horizontal table with key/value pairs from a fieldstorage''' atable = '<table width="619" border="1">' for k in astorage.keys(: atable += ''' <tr> <td > %s</td> <td > %s</td> </tr>''' %(k, astorage[k].value atable += '\n</table>' return atable def makedynamicpage(self: #make the header thepage = '''Content-type: text/html ''' #make the whole page consisting of beginning, results and ending thepage += self.beginning + self.getresults(+ self.ending return thepage %: kan bruges til at parametrisere en streng, men pas på: HTML bruger % til andre ting!

Brug af Webpage if name == " main ": message = '''Udmeld eller ret dette barn. Denne side er ikke faerdig, men viser blot hvordan fieldstorage ser ud. ''' title = 'Udmeld/Ret' test = WebPage(beginning,ending,message,title print test.makedynamicpage( Webpage er en default klasse der blot laver en webpage med det rå indhold af fieldstorage. Kan bruges under udvikling af systemet til at teste hvad der egentlig er sendt til serveren fra klienten.

Eksempel

SQL (før: OOogSQL

HTMLroutines def makeverticaltable(tablecontents: ''' Produces a html table. Input is a list of list [a1,a2,a3...] where ai is a list. Each ai is visualised as a row in the html-table. ''' def makeverticalrow(rowcontents: '''produces a row by calling makeverticalcell''' def makeverticalcell(cellcontents: ''' produces a cell in the table''' def makehorizontaltable(tablecontents: ''' Produces a html table. def makehorizontalrow(row,tablecontents: '''produces a row by calling makehorizontalcell''' def makehorizontalcell(row,cell,tablecontents: ''' produces a cell in the table'''

OBS Jeg opdagede at et par funktionskald er overflødige Vent med at bruge modulerne til jeg har rettet det.

Tilstandsdiagrammer Web-siderne er tilstande Links er overgang fra en tilstand til en anden Opdel beskrivelsen hvis der er mange links

De resterende links

Opgave 10..\øvelser\øvelser10.doc