Kasulikke pythoni näitejuppe cgi jaoks
Scripti algusse sobib enamasti (cgitb.enable() ainult debugimise ajaks!):
#!/usr/bin/python import cgi,cgitb cgitb.enable() # see peaks siis kusagil üpris algul olema print "Content-type: text/html\n\n" # mõistlik panna kohe programmi algusse print "tere tali!"
vormilt data võtmisel tasub kontrollida, kas data tuli, muidu annab Python errori (pane tähele, et ifi ja while jms sees peavad kõik asjad olema sama taandega ja taande lõpp märgib bloki lõppu):
formdata = cgi.FieldStorage()
if formdata.has_key("nimi"):
nimi=formdata['nimi'].value
if formdata.has_key("email"):
email=formdata['email'].value
if formdata.has_key("raha"):
raha=formdata['raha'].value
Väike näide pikemast ifist ja tsüklist (jällegi, taane määrab bloki lõpu ja iga ifi ja while jms lõpus on koolon :)
x=2
y=3
if x<10 and y<10: # loogikatehted on not, and, or
i=0
while i<5:
print i
i=i+1
elif x<100:
print "else if asemel on kokku kirjutatud elif"
else:
print "kõik muud cased"
Niimoodi (kolm " järjest) saad koodi panna mitmerealise stringi, kus võivad jutumärgid otse sees olla:
str="""siin on üks pikk string " kus jutumärgid sees"""
Niimoodi saad juhusliku täisarvu:
import random # see oleks siis kusagil programmi alguses teiste importide seas ... oppmove=random.randint(0, 2) # täisarv kas 0,1,2. Juhusliku floati jaoks 0...1 tee random.random()
Niimoodi saad teha stringi täisarvuks ja täisarvu (või mistahes muu data!) stringiks:
strx="1" x=int(x) uusstrx=str(x)
NB! Kui proovid stringile arvu liita a la "abc"+1 saad errori. Enne pead arvu tegema stringiks a la "abc"+str(1)
Niimoodi saad faili lõppu midagi juurde kirjutada (open(...,'a') ehk append mode):
data="mingitekst"
f = open('/tmp/tahvel', 'a') # faili täielikuks ülekirjutamiseks pane 'a' asemel 'w'
f.write(data)
f.close()
Niimoodi saad programmi töö hoobilt lõpetada:
import sys # see oleks siis kusagil programmi alguses teiste importide seas ... sys.exit(0)
Niimoodi loed failist korraga kõik read massiivi (iga rida - string - üks massiivielement) ja samas kontrollid, et kui faili pole/lugemisviga, siis handlid seda viga:
try:
f = open('/tmp/myfile', 'r')
data=f.readlines()
f.close()
except:
print "ei saanud faili avada!"
sys.exit(0) # eeldab, et oled varem teinud import sys ja juba trükkinud content-type rea koos tühja vahereaga
Sama, mis eelmine, aga terve fail loetakse ühe stringina:
try:
f = open('/tmp/myfile', 'r')
data=f.read()
f.close()
except:
print "ei saanud faili avada!"
sys.exit(0)
Niimoodi saad asendada stringijuppe:
str="xx yy xx"
res=str.replace("xx","zzz") # tulemuseks "zzz yy zzz"
Niimoodi saad splittida stringi juppideks whitespace järgi:
str="ab c 123 a " m=str.split() # tulemuseks ['ab', 'c', '123', 'a']
Niimoodi saad teha tsükli üle kogu massiivi:
m=["a","b","c"] for el in m: print el
ja sama asi harilike indeksitega:
m=["a","b","c"] i=0 while i<len(m): print m[i] i=i+1
Html vormi välja autocomplete saad niimoodi maha keerata:
<input type="text" name="nimi" autocomplete="off">
See kood genereerib automaatselt refreshiva html lehe (now peaks olema arv: sekundid):
print """ <html> <head> <meta http-equiv="refresh" content='1;url=save.py?refreshing=1&now="""+str(now)+"""'> </head> <body> """