Veggavis
Dette er en (alt for) enkel demonstrasjon av en slags gjestebok. Løsningen består av en HTML-fil og et enkelt Pythonscript. Navnet Veggavis er valgt for å indikere et lavt ambisjonsnivå.
Du kan teste og bearbeide dette ganske enkelt ved å kopiere de tre filene nedenfor til ditt CGI-områrde (cgi-bin), endre adressen i POST-setingen i HTML-fila, og åpne HTML-fila.
Merk at vi setter inn en ryddejobb når fila er blitt (for) stor.
HTML-fila
et snapshot
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"/> <title>Veggavis</title> <script src="check.js" type="text/javascript"> </script> <style> fieldset{padding:10px; background-color:#FCFDC3} td{vertical-align:top} .name{font-weight:600} .msg{color:blue; margin-left:50px;} </style> </head> <body> <h2>Veggavisen</h2> <form action="http://www.ia.hiof.no/~borres/cgi-bin/veggavis/veggavis.py" method="POST"> <fieldset> <legend class="name">Din melding:</legend> <table> <tr> <td>Hva er navnet ditt ? </td> <td><input type="text" name="name" value=""/></td> </tr> <tr> <td>Hva mener du ? </td> <td><textarea name="msg" value="1" cols="20" rows="5"></textarea></td> </tr> </table> <input type="submit" onclick="return checkAndSend(this.form);" value="Send inn"> </fieldset> </form> <hr/> <!-- next --> <div class="name">hva</div> <div class="msg">i all verden</div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">name</div> <div class="msg">Hola! </div><hr/> <div class="name">Vaskehjelpen</div> <div class="msg">Nå var det på tide å rydde opp</div><hr/> </body> </html>
Javascriptet
Javascriptet som er linket til er slik. Det sjekker at ikke de to feltene er tomme og det stiller et kontrollspørsmål for å sikre at det ikke er en automat som fyller inn data.
var filter = /^[\u0080-\u00FF]|[0-9]/; function makeQ() { var t1= Math.floor(Math.random()*15); var t2= Math.floor(Math.random()*15); var test=prompt('For å unngå automatutfylling:\n'+'Hva er summen av '+ t1+' + '+t2+' ?','??'); if(test == ''+(t1+t2)) return true; return false; } function controlText(S){ if((S.indexOf('<a')!=-1)|| (S.indexOf('href')!=-1)|| (S.indexOf('www')!=-1)|| (S.indexOf('http')!=-1)|| (S.indexOf(':')!=-1) ) return false; return true; } function checkAndSend(form) { var name=form.name.value; var msg=form.msg.value; if((name=='')||(msg=='')) { alert('Du må fylle ut både navn og mening'); return false; } // no links if((!controlText(name))||(!controlText(msg))) { form.msg.value=""; form.name.value=""; alert(' Bare bokstaver, tall og .'); return false; } if(!makeQ()) return false return true; }
PythonScriptet
#! /usr/bin/python import cgi,string import cgitb; cgitb.enable() """ Receives a name and a message. 1 opens a HTML-page, msg.html 2 inserts name and message in the HTML 3 writes the file back 4 returns the content of the file 5 restart with a minimum file if it grows to big HTML-file is: avis.html relative to this script ------------------------------------- bs 2009 ------------------------------------- """ # running file fileName='avis.html' # when cleaning basicfilename='startavis.html' # logging logfile='attempts.txt' """ what will we allow """ def checkString(S): if S.find('<a')!=-1: return False if S.find('href=')!=-1: return False if S.find('www.')!=-1: return False return True form=cgi.FieldStorage() print 'Content-type: text/html; charset=utf-8\n' # assume a name and a message theName='' theMsg='' if form.has_key('name'): theName=form['name'].value if form.has_key('msg'): theMsg=form['msg'].value file=open(fileName,'r') s=file.read() file.close() #log file=open(logfile,'r') t=file.read() file.close() file=open(logfile,'w') t=t+theName +':'+theMsg+'\n' if len(t) > 10000: t='restart\n' file.write(t) file.close() # we clean it when it grows too large if len(s) > 4000: file=open(basicfilename,'r') s=file.read() file.close() #log #file=open(logfile,'w') #file.write('restart\n') #file.close() if len(theName) >0 and len(theMsg)>0: if checkString(theName)and checkString(theMsg): fragment="""<div class="name">%s</div> <div class="msg">%s</div><hr/>"""%(theName,theMsg) s=s.replace('<!-- next -->','<!-- next --> '+'\n'+fragment) file=open(fileName,'w') file.write(s) file.close() print s
Den refererte basicfilename='startavis.html' er rett og slett en kort versjon av avis.html.