1 / 47

Afslutning

Afslutning. Gennemgang af CGI og systemet fra sidst igen?, Eksamensspørgsmål, semesteropgave , systemudvikling, evaluering. Igen?. Skal vi have gennemgangen af systemet fra sidste gang igen?. CGI. Common Gateway Interface

koren
Télécharger la présentation

Afslutning

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Afslutning Gennemgang af CGI og systemet fra sidst igen?, Eksamensspørgsmål, semesteropgave, systemudvikling, evaluering

  2. Igen? • Skal vi have gennemgangen af systemet fra sidste gang igen?

  3. CGI • Common Gateway Interface • Måde at afvikle programmer påserveren, hvorresultatetsendestilbagetilklienten (browseren) • Kræver at webserverener sat op korrekt (kigger vi påsenerehvis I selvvil) • Alleprogrammeringssprogkanbenyttes • Mestkendt: Perl, Python

  4. Vi sender data afsted

  5. 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:http://www.google.dk/search?q=filezilla&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_daDK217DK217 • Ved POST bliver dataen sendt afsted i en ”messagebody” 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. Key Value Splitter Start på GET strengen

  6. Dataflow

  7. Forms • <formid="form1" method="post" action="actionResult.py"> • <p> • <inputtype="submit" name="Edit" value="Ret” /> • <inputtype="submit" name="Remove" value="Udmeld” /> • <inputtype="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

  8. Test af cgi

  9. Illustrerer • http://pbvahlst.web.student.hum.au.dk/ITOE07/test/index.html • Felter, menuer, radioknapper, checkboxe • (Note to self: husk nu at tænde det trådløse netkort og log ind!!!)

  10. HTML-koden Hvor skal dataen sendes til? Skal den sendes som en del af URL’en eller som en ”messagebody?” Starten på ’form’ • <form action="testresults.py" method="post" id="form1"> • <fieldset> • <legend>Test</legend> • <p> • <label for="name">Name</label> • <input type="text" name="name" id="name" /> • <label for="address">Address</label> • <input type="text" name="address" id="address" /> • </p> • <p> • <label for="colorchoice">Choose color</label> • <select name="colorchoice" id="colorchoice"> • <option value="green">green</option> • <option value="blue">blue</option> • <option value="red">red</option> • </select> • <label for="happy">Are you happy</label> • <input type="checkbox" name="happy" id="happy" value="true" /> • </p> xhtml til screen reader Text felt Menu Den value der bliver overført hvis den er valgtHvis intet er valgt bliver der ikke overført noget Checkbox

  11. HTML-koden Samme navn: kun en kan være valgt af gangen • <p> • <label> • <input type="radio" name="Choosedish" value="fish" /> • Fish</label> • <br /> • <label> • <input type="radio" name="Choosedish" value="meat" /> • Meat</label> • <br /> • <label> • <input type="radio" name="Choosedish" value="bread" /> • Bread</label> • </p> • <label for="task">What do youwant to do?</label> • <selectname="task" id="task"> • <option value="eat">eatdinner</option> • <option value="sleep">go to sleep</option> • <option value="work">go to work</option> • </select> • <br /> • </fieldset> • <p> • <input type="submit" name="PostIt" id="PostIt" value="Post http request" /> • </p> • </form> Radioknap-per Menu Knap

  12. Test af cgi

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

  14. Brug af testresults.py • <form action = ”http://pbvahlst.web.student.hum.au.dk/ITOE07/test/testresults.py” method="post" id="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-programmettestresult.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.

  15. 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: http://pbvahlst.web.student.hum.au.dk/ITOE07/

  16. findResult.py • <form id="form1" method="post" action="findResult.py"> • <p>CPR • <input type="text" name=“cpr“ /> • </p> • <p> • <input type="submit" name=“search" value=“Søg“ /> • </p> • </form> • Data sendt: cpr = 1111111 & 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 Del af en statisk xhtml-side Placeringen af Python fortolkeren Laver et objekt af klassen FindResult og printer den som htmltabel Bliver kun kaldt hvis det er denne fil der eksekveres

  17. Resultat

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

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

  20. 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()

  21. Hvordan sker det? Haringenanelseomhvaddersker

  22. Hvordan sker det?

  23. Hvordan sker det? def makeDynamicPage(self): #make the header thePage = '''Content-type: text/html\n\n ''' #make the whole page consisting of beginning, results and ending thePage += self.beginning + self.getResults()+ self.ending return thePage

  24. Hvordan sker det? classFindResult(ResultPage): def __init__(self, beginning, ending, message,title): ResultPage.__init__(self, beginning, ending, message,title) … defgetResults(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 returnself.displayResults()

  25. 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})

  26. Hvordan sker det? def __init__(self, tableName, key=''): Persistent.__init__(self,tableName, None) ifkey != '': #insert the tablerow self.values = database.findRecords(tableName,[],{self.primaryKey:key})

  27. Hvordan sker det? def displayResults(self): if self.results != None: if self.results.empty == False: theTable = self.results.makeHorizontalTable()

  28. Hvordan sker det? def makeHorizontalTable(self): return htmlRoutines.makeHorizontalTable(self.combineColumnNamesAndValues())

  29. Hvordan sker det? def makeHorizontalTable(tablecontents): htmltabel = '<table>\n' entries = tablecontents[0] for row in range(len(entries)): htmltabel += makeHorizontalRow(row,tablecontents) htmltabel += '</table>\n' return htmltabel

  30. Hvordan sker det? Udskriv til webserveren 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

  31. Skal vi have det en gang til? ?

  32. Summarummarum: Webpages Overskriver overklassen funktioner Overskriver overklassen funktioner

  33. 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 isreplacedby 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

  34. Klassen Webpage • def displayResults(self,aStorage): • '''Input: a fieldStorage object • Returns a horizontal table with key/value pairs from a fieldstorage''' • atable = '<table> • 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 • %: kanbrugestil at parametrisere en streng, men pas på: HTML bruger % tilandre ting! tuple

  35. 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.

  36. Eksempel Hvis vi kalde vores test af webPage med formen fra tidligere ville det se sådan ud

  37. SQL (hed før: OOogSQL) nyt

  38. HTMLroutines (nyt modul som SQL benytter sig af) • defmakeVerticalTable(tablecontents, header=True): • ''' Produces a html table. • Input is a list of list [a1,a2,a3...] whereai is a list. • Eachai is visualised as a row in the html-table. • ''' • defmakeVerticalRow(rowcontents, header=False): • '''produces a row by callingmakeVerticalCell''' • defmakeVerticalCell(cellcontents): • ''' produces a cell in the table''' • defmakeHorizontalTable(tablecontents, header=True): • ''' Produces a html table. • defmakeHorizontalRow(row,tablecontents, header=False): • '''produces a row by callingmakeHorizontalCell''' • defmakeHorizontalCell(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

  39. Husk! • Brug det nye databasemodul. • Modulet i har lavet før 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

  40. Opsætning af apache2 webserver • http://apache.org/dist/httpd/binaries/win32/filen hedder ”apache 2.2.6-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

  41. Hvordan virker det? • Når alt er sat op korrekt skulle det gerne virke således at hvis I skriver http://localhost 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 http://localhost/minOpgave/eksamen/test.py Refererer til root dir. F.eks. D:\HTTPI stedet for www

  42. Eksamensspørgsmål • Redegør for funktioner i Python og de fordele der er ved at bruge modulære funktioner? • Redegør for kontrolstrukturer i Python og deres virkemåde. Herunder også algoritmebegrebet. • Redegør for ER-diagrammer: hvilke elementer er de bygget op af og hvordan kan elementerne sammensættes? • Redegør for relationsdatabaser: hvad er tabeller og hvordan kan tabeller kombineres. Hvordan virker SELECT? • Redegør for den objektorienterede programmeringsstilart, samt for designværktøjet UML. • Redegør for begrebet ’web-programmering’. Hvordan opbygges dynamiske hjemmesider og hvordan virker de?

  43. Eksamensspørgsmål 2 • Spørgsmålene er lagt op på hjemmesiden, med hjælpetekst der beskriver hvor i skal lede i litteraturen for at komme omkring de forskellige spørgsmål • Overvej om I evt. kan binde nogle af spørgsmålene sammen, hvis i nu skulle have mere tid • Husk at illustrere med egne eksempler

  44. Eksamen • Der vil ikke umiddelbart blive stillet krav til at i skal kunne ændre i koden på stedet. • I skal selv have jeres eksempler med på en bærbar, eller en USB-pen

  45. Semesteropgave • Tag udgangspunkt i det udleverede system fra uge 48 og lav en dynamisk hjemmeside. F.eks. Dele af et biografbookingsystem, CD-kartotek, oversigt over notater fra timerne med mulighed for søgning, osv. http://vahlstrup.com/ITOE07/ovelser/semesteropgave.pdf

  46. Systemudvikling • Peter Bøgh Andersen vil gerne have at I får lavet en aftale med et firma eller en organisation inden semesterstart 1. februar, da forløbet kommer til at omhandle et løbende samarbejde med en sådan. Dette kunne f.eks. være: • et firma der skal have lavet et system til lagerstyring, • et supermarked der skal have et nyt salgssystem, • en læreanstalt der skal holde styr på kurser lokaler, el. lign.

  47. Evaluering • evalueringsskema

More Related