Kasulikke pythoni näitejuppe cgi jaoks: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
Resümee puudub
12. rida: 12. rida:
</pre>
</pre>


vormilt data võtmisel tasub kontrollida, kas data tuli, muidu annab Python errori:
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):


<pre>
<pre>

Redaktsioon: 19. oktoober 2011, kell 14:14

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

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