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

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Medlem af Kom godt i gang med. Medlem af Konfiguration •Forberedelse –Opret KNX projekt i ETS •Installer ETStoKNXCONTROL og konverter KNX projekt med.
Stored Procedure Stored Procedure er programstumper, der gemmes i databasen og afvikles op databaseserveren på samme måde som forespørgsler. Med Stored.
Introduktion til HTML Formularer V1 introduktion til formularer Den sidste af HTML strukturmarkørerne er FORM-markøren, der bruges til at lave.
Afslutning Gennemgang af CGI og systemet fra sidst igen?, Eksamensspørgsmål, semesteropgave, systemudvikling, evaluering.
Dag 4 Fortryk-knap og videre til kasse Dagens program: 1.Fortryd-knappen ud for hver vare i kurven skal virke Formiddagens arbejde:
SQL introduktion og basis
Drupal[.org] Open Source CMS 6/
Select one of the 3 title pages and delete the others. Please do not create new title pages by using the layouts Title 1 – 3 as these layouts do not contain.
B.V. Electronic Østerbro Skive GuideOnLine.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
SQL 1 DDL og DML.
Tekst starter uden punktopstilling For at få punkt- opstilling på teksten, brug forøg indrykning For at få venstre- stillet tekst uden punktopstilling,
Design definition  Den proces, som med forskellige teknik- ker definerer en enhed, en proces, eller et system i tilstrækkelige detaljer, således at det.
Arkitektur Embedded SQL Tema Persistens
SQL sortering og gruppering. RHS – IT A 2 SQL - sortering Hvis en forespørgsel returnerer mange rækker, kan det være bekvemt at sortere resultatet SQL.
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
Overskrift her Navn på oplægsholder Navn på KU- enhed For at ændre ”Enhedens navn” og ”Sted og dato”: Klik i menulinjen, vælg ”Indsæt” > ”Sidehoved / Sidefod”.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
Modul 1 (B) Rød løber Tid: 30 minutter. Spilleregler for dagen.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
Indsæt nyt billede: Format: B 254 x 190,5 mm Efter indsættelse, højreklik på billedet og placér det bagerst. Delete det gamle foto Model-Driven Development.
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
UML og Klasser og Objekter i Python
Medialogy Learning Spaces in Copenhagen What do we want ? What can we do ? Possibilities and concerns.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Algoritmer og Datastrukturer 1 Greylisting Gerth Stølting Brodal.
Database Normalization without Mathmatics
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
Overskrift her Navn på oplægsholder Navn på KU- enhed For at ændre ”Enhedens navn” og ”Sted og dato”: Klik i menulinjen, vælg ”Indsæt” > ”Sidehoved / Sidefod”.
Dag 3 Indkøbskurv Jeres sider er nu synlige på Dagens program:
Distribution af funktionalitet Webservice med WCF x.
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Distribution af funktionalitet Webservice med WCF x.
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
The Rethinking Resource Sharing Initiative Poul Erlandsen National Library of Education Copenhagen, Denmark.
Abstrakte klasser og interfaces i Java
Hex Oplæg til eksamen 28/ Dagsorden Introduktion Præsentation af spillet Vores graf MinimaxDFS/BFS Disjoint sets.
Programering af mobile enheder Windows Phone Storage.
Lasse Steensgaard [xls]Opsamlende forelæsning på W2, 2. april 2003slide 1 HTML og PHP: Baglæs fra output til input PHP: Variable, strenge og arrays Funktioner,
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
14. Web-baserede Apps i.NET. 2 NOEA2009C#-kursus Objectives “Real-world applications are typically multi-tier, distributed designs involving many components.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
H:\ public_html \ gwd \ oevelse_x \
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Intro Evaluering De sidste to gange?. HTTP, cookies og sessions Forelæsning nr 10 Tilbage til trafikken mellem server – client Sende HTTP-request og respons.
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
Opsamling og repetition. Forelæsning 12 1) Opsamling og repetion - arrays - PHPs mysql-funktioner - SQL: SELECT, UPDATE, INSERT, DELETE - sikkerhed og.
Fremstilling af Simple WEB steder [ITPL] Foråret 2004
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Intro Evaluering De sidste to gange?. HTTP, cookies og sessions Forelæsning nr 10 Tilbage til trafikken mellem server – client Sende HTTP-request og respons.
3. time Her beskæftiger vi os med John F. Sowas forklaring af erfaringsviden. John F. Sowa.
OPERATIONEL ANALYSE AF WEBADFÆRD OAW – LEKTIONSGANG 4.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Mikkel deMib Svendsen Duplicate Content & Multiple Site Issue Mikkel deMib Svendsen
Database Some walk through lv/ Figures & some text from: © Pearson Education Limited 1995,
WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data.
Simpel test-client (javascript) Session og Application data
MongoDB Ikke SQL!.
Præsentationens transcript:

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

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

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 (kigger vi på senere hvis I selv vil) Alle programmeringssprog kan benyttes Mest kendt: Perl, Python

Vi sender data afsted

Data kan sendes på 2 måder: POST eller GET Ved GET bliver vores forespørgsel omkodet til en del af url’en. Den er altså synlig for andre: ff&ie=UTF-8&rlz=1B3GGGL_daDK217DK217 Ved POST bliver dataen sendt afsted i en ”message body” og vil ikke være synlig for andre Grundet dette er det meningen at vi kun bruger GET når vi bare skal modtage data fra serveren og f.eks. gerne ville kunne give dette link videre til andre. F.eks. I google søgningen, billedgallerier osv. Vi bruger derimod POST til alt hvor vi skal overføre information til serveren såsom ordre, ændringer af adresser og andre private ting. KeyValue Splitter Start på GET strengen

Dataflow

Forms 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 ITOE07/test/index.html ITOE07/test/index.html Felter, menuer, radioknapper, checkboxe (Note to self: husk nu at tænde det trådløse netkort og log ind!!!)

HTML-koden Test Name Address Choose color green blue red Are you happy Text felt Menu Check box Starten på ’form’ Hvor skal dataen sendes til?Skal den sendes som en del af URL’en eller som en ”message body?” xhtml til screen reader Den value der bliver overført hvis den er valgt Hvis intet er valgt bliver der ikke overført noget

HTML-koden Fish Meat Bread What do you want to do? eat dinner go to sleep go to work Radio knap- per Menu Knap Samme navn: kun en kan være valgt af gangen

Test af cgi

FieldStorage aStorage = cgi.FieldStorage() Kan behandles som en slags dictionary If ’address’ in aStorage.keys:  addressen = aStorage[’address’].value Returnerer et object med variablen value som indeholder den værdi der passer til nøglen

Brug af testresults.py 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 det eksemplar der ligger på min serverplads Start med at lade alle sider aktivere testresults.py Så kan I se præcis hvilke data der fremsendes.

Gennemgang af eksempelsystemet Et lille system til børnehaver hvor det er muligt at søge på børn og se alle børn i børnehaven Systemet: ITOE07/ ITOE07/

findResult.py CPR Data sendt: cpr = & search = Søg findResult.py  #!/usr/bin/python  from dynamicWebPages import *  if __name__ == "__main__":   title = 'Vis resultat'  test = FindResult(beginning,ending,title)  print test.makeDynamicPage() Output af print går ikke ud på konsollen men opfattes som en beskrivelse af den html side der skal sendes tilbage Laver et objekt af klassen FindResult og printer den som htmltabel Placeringen af Python fortolkeren Del af en statisk xhtml-side Bliver kun kaldt hvis det er denne fil der eksekveres

Resultat

test = FindResult(beginning,ending,message,title)

Hvordan sker det? def __init__(self, beginning, ending, title): WebPage.__init __( self, beginning, ending,title)

Hvordan sker det? def __init__(self, beginning, ending, title): self.beginning = 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?

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

Hvordan sker det? class FindResult(ResultPage): def __init__(self, beginning, ending, message,title): ResultPage.__init__(self, beginning, ending, message,title) … 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 = ' \n' entries = tablecontents[0] for row in range(len(entries)): htmltabel += makeHorizontalRow(row,tablecontents) htmltabel += ' \n' return htmltabel

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 Saml og returner Udskriv til webserveren

Skal vi have det en gang til? ?

Summarummarum: Webpages Overskriver overklassen funktioner

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, title): # title is placeholders in the html-string #it isreplaced by the contents of the variable title self.beginning = beginning.replace('#title',title,1) self.ending = ending self.storageContents = cgi.FieldStorage() 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) Her fisker vi FieldStorage ud af cgi modulet Fisk det ønskede data frem f.eks. fra databasen Formater det hentede data til xhtml

Klassen Webpage def displayResults(self,aStorage): '''Input: a fieldStorage object Returns a horizontal table with key/value pairs from a fieldstorage''' atable = ' for k in aStorage.keys(): atable += ''' %s %s ''' %(k, aStorage[k].value) atable += '\n ' 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! tuple

Brug af Webpage if __name__ == "__main__": title = 'Udmeld/Ret' test = WebPage(beginning,ending,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 Hvis vi kalde vores test af webPage med formen fra tidligere ville det se sådan ud

SQL (hed før: OOogSQL) nyt

HTMLroutines (nyt modul som SQL benytter sig af) def makeVerticalTable(tablecontents, header=True): ''' 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, header=False): '''produces a row by calling makeVerticalCell''' def makeVerticalCell(cellcontents): ''' produces a cell in the table''' def makeHorizontalTable(tablecontents, header=True): ''' Produces a html table. def makeHorizontalRow(row,tablecontents, header=False): '''produces a row by calling makeHorizontalCell''' def makeHorizontalCell(row,cell,tablecontents): ''' produces a cell in the table''’ Kan også bruges uden SQL modulet hvis man har noget på listeform man gerne vil have lavet om til en xhtml-tabel

Husk! Brug det nye databasemodul. Modulet i lavede i sidste uge er her med som modulet SQL, med lidt flere metoder Husk at uploade som text-filer og sætte permissions på serveren, gøres igennem fileZilla eller lignende ftp- program

Opsætning af apache2 webserver filen hedder ”apache win32-x86-no ssl.msi” til pc Gør det nemmere og hurtigere at teste sine scripts, da de ikke skal uploades til serveren hver gang, og der skal heller ikke sættes permissions På hjemmesiden ligger der en config fil, hvis i søger på ”PBV_CHANGE” kan i se de steder der skal ændres for at det virker. Den fil i skal ændre ligger i installationsdiret under ”conf” og hedder ”httpd.conf” Husk at ændre den øverste linje i jeres scripts så de peger på det sted hvor python fortolkeren ligger på jeres egen maskine f.eks. ”#!C:/python25/python.exe” husk også at ændre det tilbage inden i ligger det på serveren til ”#!usr/bin/python” og så sætte permissions

Hvordan virker det? Når alt er sat op korrekt skulle det gerne virke således at hvis I skriver i en browser får i den evt. index.html eller index.py side i skulle have liggende i jeres root-dir. Så altså hvis i har en mappestruktur der hedder minOpgave/eksamen/ med filen test.py tilgår i den via browseren ved Refererer til root dir. F.eks. D:\HTTP I stedet for www

Opgave 10 Opgave 10 og de tilhørende filer ligger på hjemmesiden