Pythoni cgi-d dijkstra serveris: kiire sissejuhatus

Allikas: Lambda

Kolmanda praktikumi jaoks kirjutate CGI skriptikeeles 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.)

cgi-bin kataloog peaks sul Dijkstra serveris olema juba ette valmis tehtud, aga kui sul millegipärast ei ole public_html all cgi-bin kataloogi, siis mine kataloogi public_html ja tee seal

$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 

või

$chmod a+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 realõppe ja dijkstra proovib käivitada programmi nimega python^M . Selle parandamiseks salvestage fail UNIX faililõpuga.

Kontrollimaks, mis reavahatused sul on, sea korra Scite all View->end of line. Esimese rea lõpus ei tohi olla CR LF, vaid peab olema ainult LF. Edaspidistel ridadel sobib ka CR LF, aga lihtsam on teha nii, et kõik oleks LF. Selles vali Options->line end characters LF ja seejärel tee Options->convert line characters. Kui korras, keera View->end of line maha.

Kasulik on enne brauseri kaudu programmi käivitamist panna ta korra käima otse käsurealt: siis näed, kas ta üldse käivitub, kas on süntaksi vead jms: süntaksivigu brauseri kaudu käivitamine ei näita, saad lihtsalt mittemidagiütleva veateate.

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.