Pythoni cgi-d dijkstra serveris: kiire sissejuhatus
Kolmanda praktikumi jaoks kasutate CGI skripti, mida saate enda rakenduse jaoks kohandada (aga ei pea tingimata). CGI skript on kirjutatud keeles Python.
CGI rakendused elavad public_html alamkataloogis cgi-bin. (CGI rakendusi hoitakse traditsioonilselt staatilistest lehtedest eraldi, sest tegemist on ikkagi päris serveris käivituvate programmidega ja neil on sellest tulenevalt ka kõrgem turvarisk.)
$mkdir cgi-bin
Esmatutvus Pythoniga CGI kontekstis
Looge cgi-kataloogi järgmise sisuga fail "test.py":
#!/usr/bin/python print "Content-type: text/html" print print "<html><head><title>test.py</title></head><body><h1>Hello, World!</h1></body>"
Esimene, trelliga rida ütleb, et käivitate pythoni interpretaatori ja ülejäänud read trükivad välja HTMLi vastuse. Content-type ja reavahetus on sealjuures väga kriitilised saata.
Proovige brauseris selle faili aadress avada ja jälgige mis juhtub.
http://dijkstra.cs.ttu.ee/~tXXX/cgi-bin/test.py
Saate räige veateate, sest CGI skript ei ole käivitatav grupi õigustes (ega niisama).
Parandage failiõigused:
$chmod ug+x test.py
Proovige CGI skripti uuesti käivitada ja veenduge, et kõik töötab. Ka siin on oluline jälgida, et tudengite gruppi kuulujatel saaks antud faili nii lugeda kui kirjutada (st arvestage ka kataloogide pääsuõigustega).
NB! Kui saate veateate "Internal Server Error" või midagi sarnast, siis võib juhtuda, et probleem on realõpumärkides: kui käsurea käsk
$cat test.py
annab esimeseks reaks #!/usr/bin/python^M , siis kasutate windowsi faililõppe ja dijkstra proovib käivitada programmi nimega python^M . Selle parandamiseks salvestage fail UNIX faililõpuga.
Python + CGI
Selleks, et asju dünaamilisemaks teha, saate pythoni abil vastu võtta ka vormide infot. Selleks on tore imporditav moodul nimega cgi, mille funktsioonid aitavad vormiinfot söödavamal kujul sisse võtta.
Looge fail test2.py:
#!/usr/bin/python
import cgi
print "Content-type: text/html"
print
print "<html><head><title>test2.py</title></head><body><h1>Hello, World!</h1><p>Lisaparameeter oli "
formdata = cgi.FieldStorage()
if formdata.has_key("lisaparameeter"):
print formdata['lisaparameeter'].value
else:
print "puudu"
print ".</p></body>"
Vaadake faili brauseris:
http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py
Parandage faili õigused omaette kirudes, et seda unustati teile teisel korral öelda ja vaadake uuesti.
http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py?lisaparameeter=olemas
See on siis selleks, et saaksite aru, et mis toimub.