Flask, sessiot ja tietokannat - Viikkotehtävä 4
Tällä viikolla harjoitellaan Flaskin ja sessioiden käyttöä sekä tietokantojen käsittelyä.
Kaikille tasoille yhteiset vaatimukset:
- Käytetään Python-kieltä. Ohjelmakoodi on kommentoitava.
- Sivut on toteutettava Flask-sovelluksena, joka toimii users.jyu.fi-palvelimella. Muille palvelimille sijoitetut sovellukset eivät kelpaa.
- Kaikkien sivujen on oltava validia HTML5:sta
- Javascriptiä ei saa käyttää
- Olkaa tarkkana sessiomuuttujien kanssa. Sovelluksen on toimittava vaikka sille saavuttaisiin ensimmäistä kertaa jollekin muulle sivulle kuin etusivulle. try..except-rakennetta on hyvä käyttää niin välttää KeyErrorit. Sessio-muuttujat kannattaa aina alustaa jollakin. Validaattoria voi aina käyttää hyvänä testiapuna, koska se paljastaa tämän sortin virheet. Sovellus ei saa kaatua
- Tietojen tallentamiseen on käytettävä users.jyu.fi:ssä toimivaa SQLite3-tietokantaa.
- Sivujen tulee pysyä valideina, vaikka käyttäjä syöttäisi HTML-koodia joihinkin syötekenttiin. Ohjelma ei saa kaatua. Sivuston sisältämä HTML on tuotettava Jinja-templatejen avulla. Python-koodin seassa ei saa esiintyä HTML-koodia.
- Kommentoikaa koodin oleellisimpia osia!
- Käytetään valmista tietokantaa, jonka luontilauseet löytyvät video.sql-tiedostosta.
Tietokannan rakennetta ei saa muuttaa. Älä siirrä sql-lauseita leikepöydän kautta vaan käytä suoraan
annettua tekstitiedostoa, joka on UTF-8-muodossa.
- Lomakkeessa, jolla aiheutetaan muutoksia (lisäys, muutos, poisto) tietokantaan, ei saa käyttää GET-metodia
- SQL-lauseiden muodostaminen merkkijono-operaatioilla on ehdottomasti kiellettyä ja pudottaa vastauksen pisteet nollaan
- Sivustolla on käytettävä UTF-8-merkistöä kaikkialla.
- Salasanoja ei saa tallentaa selkokielisinä vaan on käytettävä SHA-512-algoritmia.
- Tietokannan taulujen ID-kenttien sisältöä ei pidä näyttää käyttäjälle eikä kysyä käyttäjältä. Tietokannassa on käytetty SERIAL/AUTOINCREMENT-tyyppistä kenttää jolloin tietokanta keksii ID-kenttien arvot tarvittaessa itse.
- Älä kirjoita flaskin lokitiedostoa suoraan cgi-bin-kansioon. Se saattaa rikkoa koko sovelluksen toiminnan.
- SQL-kyselyissä ei saa käyttää DISTINCT-ominaisuutta
Taso 1
Toteuta elokuvavuokraamon käyttöliittymä:
- Sovelluksen etusivulla näkee listauksen vuokrauksista (vuokraus-taulun sisältö). Listauksessa näkyy jokaisen vuokratun elokuvan nimi, vuokraajan nimi, vuokrauspvm, mahdollinen palautuspvm ja maksettu summa. Listaus on tehtävä käyttäen ul- ja li-elementtejä.
- Uusia vuokrauksia syötetään toisella sivulla, joka kysyy lomakkeella vuokraustaulun edellyttämät tiedot. Käytettävissä olevat tietokannasta löytyvät henkilöt pitää esittää lomakkeella alasvetovalikossa. Valittavissa olevat tietokannasta löytyvät elokuvat pitää esittää myös alasvetovalikossa. Pidä huoli, että elokuvat erottaa toisistaan vaikka niillä olisi sama nimi.
- Jos vuokrauspäivämääräksi, palautuspäivämääräksi tai maksetuksi summaksi syötetään epäkelpo arvo niin näytetään lomakkeen yläpuolella virheilmoitus ja pyydetään täyttämään lomake uudelleen. Katso tietokannan rakenteessa määritellyt rajoitteet.
- Onnistuneen vuokrauksen lisäämisen jälkeen edelleenohjataan suoraan sovelluksen etusivulle ja sivulla olevassa listauksessa näkyy heti myös lisätty vuokraus
- Sovelluksen etusivulta on oltava linkki lisäyssivulle.
Taso 3
Toteuta taso 1 -mukainen elokuvavuokraamotietokantasovellus seuraavilla muutoksilla ja lisäyksillä:
- Muokkaa vuokrauslistausta
- Listaus on esitettävä kaksitasoisena listana jossa uloimmalla tasolla ovat elokuvat ja niiden julkaisuvuodet elokuvan nimen mukaisessa aakkosjärjestyksessä ja toissijaisesti julkaisuvuoden mukaisessa järjestyksessä
- Sisemmässä listassa on listattu aina kyseisen elokuvan vuokraajien nimet ja vuokrauspäivämäärät, palautuspäivämäärät ja maksettu summa. vuokrauspäivämäärän mukaisessa järjestyksessä siten, että vanhin vuokraus on ensimmäisenä. Toissijaisesti listaus järjestetään palautuspäivämäärän mukaan.
- Elokuvia, joita ei ole vuokrattu, ei tarvitse listata
- Tee jokaisesta vuokrauksesta linkki sivulle jossa pääsee muuttamaan kaikkia kyseisen vuokrauksen tietoja ja voi tallentaa muutetut tiedot tietokantaan
- Mahdollista myös vuokrausten poistaminen. Lisää vuokrauksen muokkaamissivulle painike, jolla voi poistaa kyseisen vuokrauksen
- Lisää sovellukseen sivu jossa listataan vuokraajat (jäsenet) taulukossa, jonka sarakkeina ovat vuokraajan nimi, osoite, liittymispvm ja syntymävuosi nimi).
- Tee taulukon sarakeotsikoista linkit, joilla voi valita listataanko vuokraajat kyseisen sarakkeen mukaan järjestettynä. Esim. klikkaat linkkiä syntymävuosi niin listaus järjestetään syntymävuoden mukaan
- Sovellus muistaa mikä sarake on viimeksi valittu järjestysehdoksi ja järjestää jäsenlistauksen automaattisesti tämän sarakkeen mukaan seuraavan kerran sivulle tultaessa
- Näytä vuokrausta lisättäessä mahdollisesti esiintyvät virheet aina virheeseen liittyvän kentän vieressä.
- Sovelluksen jokaisella sivulla on samanlainen navigointipalkki, jossa ovat linkit sovelluksen kaikille sivuille (vuokrauslistaus, vuokrauksen lisäys, jäsenlistaus). Toteuta sivujen yhteiset osat käyttäen Jinja-templatea eli käytä yhteistä pohjatemplatea. Kts. base.txt ja jinja2.txt
Taso 5
Toteuta taso 3 -mukainen elokuvavuokraamotietokanta seuraavilla muutoksilla ja lisäyksillä:
- Sovellukseen pitää kirjautua syöttämällä lomakkeelle sähköpostiosoite ja salasana. Ainoa kelpaava osoite on tiea218@foobar.example ja salasana on web-sovellukset Salasana ei saa esiintyä selkokielisenä ohjelmakoodissa! Tunnus voi esiintyä, koska sitä voidaan periaatteessa tarvita sähköpostin lähettämiseen mutta jos tätä tarvetta ei ole niin silloin myös tunnusta (sähköpostiosoitetta) on hyvä käsitellä vain kryptatussa muodossa.
- Jos käyttäjätunnus tai salasana oli väärä, tulostetaan asianmukaiset virheilmoitukset ja palautetaan käyttäjä takaisin kirjautumissivulle. Virheilmoituksessa tulee eritellä virhe tarkemmin. Esimerkiksi "Salasana oli väärä." tai "Käyttäjätunnusta ei löytynyt.". Virheilmoitukset esitetään niihin liittyvien syöttökenttien vieressä.
- Jos yrittää tulla jollekin sovelluksen sivulle kirjautumatta niin edelleenohjataan automaattisesti kirjautumissivulle.
- Oikeiden kirjautumistietojen syöttämisen jälkeen pääsee automaattisesti (edelleenohjaus, redirect) vuokraussivulle
- Lisää sovellukseen sivu jolla voi kirjautua ulos (logout). Lisää linkki tähän sivuun navigointipalkkiin.
- Sivuston on toimittava järkevästi vaikka sitä käyttäisi useampi henkilö samaan aikaan. Kokeile itse selata eri selaimilla samaan aikaan ja kirjautua sisään eri henkilöinä.
- Muuta vuokrauslistausta siten, että listaat myös ne elokuvat, joita ei ole vielä vuokrattu.
- Lisää vuokrauslistaukseen kunkin elokuvan nimen perään yhteislukumäärä tämän elokuvan vuokrauskerroista
- Lisää jäsenlistaukseen tieto kunkin henkilön tekemien vuokrausten lukumäärästä
- Mahdollista myös elokuvien poistaminen. Anna järkevä virheilmoitus jos poistamisyritys rikkoo tietokannan viite-eheyttä
Käyttäjien kommentit