Python ja CGI-ohjelmointi - Luento 3

Python on korkean tason ohjelmointikieli, jonka suunnittelussa on panostettu erityisesti kielen luettavuuteen. Monesta muusta kielestä poiketen Python käyttää koodin sisennyksiä koodilohkojen merkintään.

Common Gateway Interface (CGI) on yksinkertaisin rajapinta WWW-sovelluksien tekemiseen.

Luentotaltiointi

Ongelmia videon katselussa?

Python

Pythonin syntaksiin kannattaa tutustua esim. seuraavien tutoriaalien ja ohjeiden avulla:

Seuraavassa on käyty läpi tärkeimpiä Pythonin piirteitä. Lähteenä on käytetty pääasiassa Jussi Kasurisen Python ohjelmointiopasta ja Python tutoriaalia.

Muuttujat

Merkkijonot

Pythonissa merkkijonoja voidaan esittää seuraavilla tavoilla:

Listat

Listojen palastelu tapahtuu samaan tapaan kuin merkkijonoilla.

Listoja voi muuttaa päinvastoin kuin merkkijonoja

a = [1, 2, 3, 'foo', 'bar']
a[0] = 3 # [3, 2, 3, 'foo', 'bar']
a[1] = a[2] * 3 #[3, 9, 3, 'foo', 'bar']
a[2:1] = ['kukku','luuruu'] #  [3, 9, 3, 'kukku', 'luuruu', 'foo', 'bar']

Yhteisiä funktioita merkkijonoille ja listoille:

Listojen metodeja

Operaattorit

Seuraavassa on listattu Pythonin tärkeimmät operaattorit:

if

a = 3
if a> 0:
  print "a on suurempi kuin 0"
elif a < 0:
  print "a on pienempi kuin 0"
else:
  print "a on 0"

Toistorakenteet

laskuri = 12

while laskuri> 0:
  laskuri = laskuri - 1


a = [1,2,3,'foo','bar']

for x in a:
  print x

for x in a[:]:  #tekee kopion a:sta. tarpeellinen jos aikoo muuttaa listaa
  print x

for i in range(1, 5): #range-funktio luo listan halutulta numeroväliltä
  print i

for käy järjestyksessä läpi rakenteen kaikki alkiot. vrt. Perlin foreach.

Läpikäytävää rakennetta ei pidä muuttaa läpikäynnin aikana. Jos muutoksia pitää tehdä niin on syytä käydä läpi rakenteen kopiota.

Funktiot

def summa(a, b):    # laskee lukujen summan
  summa = a + b
  return summa

Funktioiden parametrit ovat referenssejä joten niiden arvojen muuttaminen vaikuttaa suoraan kutsuvaan ohjelmaan.

Moduulit

Pythonissa voi jakaa ohjelmansa moduuleihin tai käyttää valmiita moduuleja

import cgi

Oman moduulin voi luoda kirjoittamalla python-funktioita tiedostoon, jonka nimi päättyy .py

CGI-ohjelmointi Pythonilla

CGI eli Common Gateway Interface on yksinkertaisin rajapinta WWW-sovelluksien tekemiseen

XHTML-dokumentti Python-kielellä ja CGI-rajapinnan kautta tuotettuna:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

print """Content-type: text/html

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
<head>
  <title>Hello!</title>
</head>
<body>
  <h1>Tulostetaan Pythonilla:</h1>
  <p>
"""
print "Hello World!"
print """
  </p>
</body>
</html>
"""

Virheilmoitukset ja asetukset

Pythonilla tehtyjen CGI-ohjelmien debuggaamista helpottaa cgitb-moduulin käyttöönotto:

import cgitb
cgitb.enable()

cgitb aiheuttaa virheraporttien näyttämisen www-selaimessa tai niiden tallentamisen tekstitiedostoon.

CGI-ympäristömuuttujat:

import os

print "Content-type: text/plain\r\n\r\n";
for param in os.environ.keys():
  print "%20s: %s\n" % (param,os.environ[param])

cgi-moduuli

item = form.getvalue("item")
if isinstance(item, list):
else:
import cgi
form = cgi.FieldStorage()
user = form.getfirst("user", "").upper()    # Ei hajoa vaikka tulisi useampi arvo
for item in form.getlist("item"):
    do_something(item)

HTML:n vaatimien erikoismerkkien koodaukseen voi käyttää cgi.escape(s[, quote])-metodia.

Käyttäjien kommentit

Erno ( 2007-06-24 02:48:01 )

Erittäin hyvä opas!

Alpo ( 2007-07-04 15:43:19 )

Tosi asiallinen. Puuttuu kuitenkin tietoja pahimmista ongelmista mitä PHP-syntaksin kanssa voi tulla eteen. esim. Kuinka korjataan tällainen koodi? (Tehdäänkö nimen otto funktion avulla. Eikös se onnistunut pelkästään käyttämällä valmiita MUUTTUJIA. esim. nimi saatiin viittaamalla sitä lomakekenttää, johon käyttäjä kirjoittaa nimensä: a = $_POST[ "nimilomakekenttä" ]

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento3/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2010-01-27 11:43:00
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto