Python perusteet - Demo 2

Näissä demoissa tutustutaan Pythonin ja CGI-ohjelmoinnin perusteisiin.

users.jyu.fi-palvelimessa on käytössä Python 2.4.3. Pythonin uudempien versioiden ominaisuudet eivät siis toimi. Tämän demotehtävän tekemisen apuna kannattaa käyttää seuraavia dokumentteja:

Opettele käyttämään myös Pythonin komentotulkin help-komentoa.:

[tjlahton@halava ~]$ python
Python 2.4.3 (#1, Jun 11 2009, 14:09:37) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help
Type help() for interactive help, or help(object) for help about object.
>>> import cgi
>>> help(cgi)
Help on module cgi:

NAME
    cgi - Support module for CGI (Common Gateway Interface) scripts.
...
...
...

CSS:n vaihtaminen vuodenajan mukaan

Tehtävässä vaihdetaan XHTML-sivun tyylitiedostoa vuodenajasta riippuen. Käytettävät tyylit ovat seuraavat:

  1. Luo haluamallasi editorilla vuodenaika.cgi-tiedosto ja tallenna se W-asemallesi cgi-bin/-kansioon.

    Huomaa, että käyttämäsi editorin täytyy osata tallentaa tekemäsi tiedosto unix-muodossa eikä windows-muodossa. Pythonin ei pitäisi välittää eri ympäristöjen rivinvaihtojen eroista mutta jostain syystä jalavassa oleva python on hieman kranttu.

    Luo kansio tarvittaessa. HUOM! Kansion täytyy ehdottomasti olla cgi-bin eikä mikään muu.
  2. Kopioi ohjelmasi pohjaksi seuraava koodi:
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    
    import cgitb
    cgitb.enable()
    import cgi
    import time
    import datetime
    
    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>
      <link rel="StyleSheet" href="tyyli.css" type="text/css" />
      <title></title>
    </head>
    <body>
    </body>
    </html>
    """
    
  3. Kokeile ohjelman toimintaa komentorivillä jalava/halava-koneessa:
    [tjlahton@jalava cgi-bin]$ ./vuodenaika.cgi 

    Toimiakseen ohjelma vaatii suoritusoikeuden (execute) kaikille käyttäjille. Jos ohjelmasi toimii moitteetta komentoriviltä voit kokeilla sitä selaimella osoitteesta:

    http://users.jyu.fi/~omatunnus/cgi-bin/vuodenaika.cgi

    Jos ohjelma ei toimi selaimella niin tarkista tietohallintokeskuksen ohje CGI/SSI-tekniikat ja varmista, että editorisi käyttää unix-tyylisiä rivinvaihtoja..

  4. Muuta valmista koodia sen verran, että jaat tulostukset useampaan eri osaan. Ensimmäinen osa tulostaa sivun mediatyypin ja tyhjän rivin. Toisessa osassa voit tulostaa sivun alkuosan body-elementtiin saakka ja kolmannessa osassa sivun varsinaisen sisällön. Varmista, että ohjelmasi toimii. Muista jatkossa varmistaa ohjelmasi toiminta tarpeeksi usein. Älä kirjoita liian pitkiä ohjelmakoodipätkiä testaamatta.
  5. Luo ennen head-osan tulostamista merkkijonomuuttuja tyyli ja alusta se tyhjäksi.
  6. Luo lukumuuttuja kuukausi, johon laitat arvoksi meneillään olevan kuukauden numeron. Tämän saat selville seuraavalla tavalla datetime-kirjaston avulla:
    kuukausi = datetime.datetime.now().month

    tai

    tanaan = datetime.datetime.now()
    kuukausi = tanaan.month
  7. Tee seuraavaksi if...elif...else-kontrollirakenne, missä sijoitat halutun tyylitiedoston osoitteen tyyli-muuttujaan meneillään olevan vuodenajan perusteella.
    • Tarkista ensin if-lauseella, onko meneillään talvi. if-lauseen ehdoksi täytyy siis laittaa se, että kuukausi on joko 12, 1 tai 2.
      if kuukausi==12 or kuukausi==1 or kuukausi==2:
          tyyli = "http://www.danielgreene.com/styles/photo.css"
      
      HUOM! Pythonissa lohkot merkitään sisentämällä! Sama sisennystaso tarkoittaa siis samaa lohkoa
    • Tarkista elif-lauseilla, onko meneillään kevät tai kesä. Kevään kohdalla ehdoksi täytyy siis määritellä, että kuukausi on välillä 3-5 eli suurempi tai yhtäsuuri kuin 3 ja pienempi tai yhtäsuuri kuin 5. Kesän kohdalla vastaava ehto on suurempi tai yhtäsuuri kuin 6 ja pienempi tai yhtäsuuri kuin 8. Alla esimerkki kevään elseif-rakenteesta.
      elif kuukausi >= 3 and kuukausi <= 5:
          tyyli = "http://www.danielgreene.com/styles/pretty.css"
      
    • Aseta lopuksi else-lauseessa tyyli-muuttujan arvoksi syksyn tyylitiedoston osoite.
  8. Nyt oikea tyylitiedoston osoite on tyyli-muuttujassa, eli enää tarvitsee määrittää sivu käyttämään tyylitiedostoa kyseisestä muuttujasta.
    • Tulosta tyylimääritys print-komennolla. Laita tyylin nimen paikalle tyyli-muuttuja. Joudut ensin tutustumaan Pythonin merkkijonojen muotoiluun. Korvaa tyylitiedoston osoite tyyli.css merkinnällä %s
      <link rel="StyleSheet" href="%s" type="text/css" /></pre>
      Seuraavaksi lisää tulostuksen lopettavan """-merkinnän perään % tyyli:
      """ % tyyli
      Tämä merkintä tarkoittaa, että %s korvataan merkkijonolla, joka saadaan tyyli-muuttujasta. Merkintätapa pitäisi olla tuttu printf- ja sprintf-funktioista esim. C/C++-kielestä.
  9. Kokeile sivun toimintaa selaimella ja korjaa virheet tarvittaessa.
  10. Muuta ohjelmaasi siten, että css-tiedostoa ei valitakkaan kuukauden mukaan vaan se arvotaan satunnaisesti.
    • Tee css-tiedostojen osoitteista lista
    • arvo satunnainen luku nollan ja listan alkioiden lukumäärän väliltä. Tarvitset Python random-kirjastoa.
    • Aseta sivun css-tiedostoksi arvotun luvun osoittama css-tiedosto
  11. Lisää sivulle lomake jolla käyttäjä voi itse antaa sivulla käytettävän css-tiedoston osoitteen
    • Laita lomakkeeseen yksi tekstikenttä ja submit-painike. Aseta lomakkeen action-ominaisuuden osoitteeksi python-ohjelmasi osoite.
    • Käytä Pythonin cgi-kirjastoa ja ota sivulla käyttöön lomakkeelle syötetty css-tiedoston osoite.
      form = cgi.FieldStorage() # alustaa lomake-olion
      url = form.getfirst("url", "") #pyytää ensimmäisen url-nimisen lomakekentän arvon
    • Tulosta annetun css-tiedoston osoite sivulle näkyviin p-elementin sisällä
    • Voit testata vaikka seuraavilla css-tiedostoilla:
      • http://appro.mit.jyu.fi/appro.css
      • http://hazor.iki.fi/hazor.css
  12. Mahdollista jo tiedossaolevien css-tiedostojen käyttäminen
    • Parantele lomaketta ja lisää siihen alasvetovalikko (select-elementti) jossa on listattuna kaikki ohjelmassasi olevassa listassa luetellut css-tiedostot.
    • Muuta ohjelman toimintaa sen verran, että jos käyttäjä ei syötä uutta osoitetta eli jättää kentän tyhjäksi niin silloin käytetään käyttäjän alasvetovalikosta valitsemaa css-tiedostoa
  13. Edelleen parantele ohjelmaa siten, että käyttäjän itse lisäämät css-tiedostojen osoitteet tulevat mukaan alasvetovalikkoon.
    • Älä yritä tallentaa käyttäjän lisäyksiä tiedostoon tms. Tulosta kaikki tiedossa olevat css-tiedostojen osoitteet (valmiit ja käyttäjän lisäämät) lomakkeelle piilokenttinä (hidden)
    • Aina kun ohjelmasi saa lomakkeen tiedot käsiteltäväksi sen pitää tarkistaa hidden-kenttinä tuleva mahdollinen listaus css-tiedostoista. Jos sitä ei tule niin alasvetovalikossa pitää käyttää valmista listaa mutta muutoin lomakkeelta tulevia tietoja

Käyttäjien kommentit

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/demot/demo2/
© 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-21 12:51:45
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto