Kasulikke pythoni näitejuppe cgi jaoks

Allikas: Lambda
Redaktsioon seisuga 19. oktoober 2011, kell 14:20 kasutajalt Tammet (arutelu | kaastöö)
Mine navigeerimisribale Mine otsikasti

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

Niimoodi saad splittida stringi juppideks whitespace järgi:

str="ab c 123   a "
m=str.split() # tulemuseks ['ab', 'c', '123', 'a']

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>
"""