Python Web Service From Idea to Production
Build Python web service and publish it to the world!
New instance starting 2022 w21! Enroll 2022-03-14 w11 Mon 08:00.
Course completed! Feedback was excellent 4.9 out of 5. Thanks for taking my course!
You can read feedback in comments.
Intensive course on w21 and w22.
Enroll at 08:00 on Monday! Most seats were booked right after enrollment opened. Enrollment is open right now. Update: Only few seats left. Fully booked. Queue started, enroll quickly to get better position in the queue.
Make a web app that
- Serves clients on Linux, Windows, Mac, Android, iPhone
- Logs how users use your app
- Let's many users read and edit data at the same time
- Can be used without installing anything
- Always uses the latest version of your app
100% remote, in Finnish, every day Mon-Fri 9-16. Starts on 2021-05-24 w21 Monday, ends on w22 Wednesday.
Koska kurssi on suomeksi, loput tästä sivusta on suomeksi.
Ilmoittautuminen alkaa 2021-03-15 w11 maanantaina 08:00. Kurssi on "Python weppipalvelu - ideasta tuotantoon" ja koodi on ICT8TN034-3001.
Ohje: Install Debian on VirtualBox.
Kuuden rivin weppipalvelu
Tule kurssille, niin kerron, miten tuo koodi toimii.
Alustava aikataulu
Rakenna weppipalvelu Pythonilla ja asenna se julkiselle palvelimelle.
w21
- ma Hei maailma! Järjestäytyminen. Yleiskuva. Linuxin pikakertaus. Hei Python! Hei Flask! Hei HTML!
- ti Muotit ja lomakkeet Muotit (templates). Lomakkeet (html forms) ja käyttäjän syötteet. GET ja POST.
- ke ORM Automaattiset lomakkeet ja tietokannat.
- to Lomakkeen käsittely käyttäjän syötteen validointi, tallennus tietokantaan.
- pe Käyttäjät ja kirjautuminen. Kertaus. Miniprojektien tehtävänanto.
w22
- ma Tuotantopalvelin. Apache2, mod_wsgi ja PostgreSQL. Pilven vuokraaminen.
- ti Miniprojektien rakentamista
- ke Miniprojektien esittely
Aikataulu on alustava ja muuttuu kurssin kuluessa.
Kurssi päättyy kokonaan w22 keskiviikkona. Sen jälkeen ei voi eikä tarvitse palauttaa mitään.
Läksyt
pw1 Hello Flask world!
pw1.1 Hei HTML. Tee validi, yksinkertainen weppisivu. Sellainen, jossa on samat kohdat kuin useimmissa sivuissa. Opettele ohjelman ja muottien koodi ulkoa, niin, että osaat kirjoittaa sen alusta loppuun ilman mallia.
pw1.2 Hei Flask. Tee Flaskin Hei maailma. Opettele "Hei Flaskin maailma" ulkoa, niin että osaat asentaa tarvittavat kirjastot (Update: sudo apt-get install python3-flask), kirjoittaa koodin ja testata sen ilman mallia.
pw1.3 Hei Python. Tee yksinkertainen komentoriviohjelma Pythonilla. Esimerkiksi moikkaaja, painoindeksilaskuri tms. Voi samalla kokeilla funktiota, silmukoita, ehtolauseita tai muita rakenteita. Pelkkä sormiharjoitus riittää, ohjelman ei tarvitse olla hieno tai missään suhteessa hyödyllinen.
pw1.4 Vapaaehtoinen: Hei selitys. Selitä jokainen rivi Flaskin hei maailmasta.
pw1.5 Vapaaehtoinen: Kaksi reittiä. Tee Flask-ohjelma, joka palauttaa eri sivun kahdesta eri URLista (esim "/" ja "/foobar".
pw1.6 Vapaaehtoinen: base.html. Tulosta validi HTML5-sivu muotista Flaskilla.
pw1.7 Vapaaehtoinen: SELECT * Tulosta tietokannan tietueita Flaskilla.
pw1.8 Vapaaehtoinen, vaikea: Todo. Tee todo-lista Flaskilla.
pw2 Muotit ja lomakkeet
pw2.1 Muuttuja muottiin. Lähetä ohjelmasta jokin muuttuja muottiin, ja tulosta se {{ kissanViiksilla }}.
pw2.2 Tuplamuotti. Tee Flask-ohjelma, jossa on kaksi reittiä, joista näkyy eri sivu. Tee erikseen "base.html" pohjamuotti, ja kaksi muottia, jotka laajentavat (extends) sitä. Validoi HTML kultakin sivulta. Opettele sivun koodi ulkoa niin, että osaat kirjoittaa sen alusta loppuun katsomatta edellisistä mallia.
pw2.3 Toista tätä, toista tätä. Lähetä ohjelmasta lista muottiin, ja tulosta sen arvot for-in rakenteella.
pw2.4 Vapaaehtoinen, helppo: Lomake. Tee HTML POST -lomake, jossa on kentät tyyppiä text, submit, email, password ja checkbox. Katso lomakkeen lähettämät tiedot (request) Firefoxin F12 Network -välilehdeltä. Ota ruutukaappaus. (Tämä kohta onnistuu vaikka staattisella HTML-tiedostolla ilman Flaskiakin). Bonuksena voit laittaa checkbox:n label-tagien sisään niin, että raksin tila vaihtuu labelia klikkaamalla.
pw2.5 Vapaaehtoinen: Laskuri. Tee yksinkertainen laskuri, joka ottaa numeron tai pari lomakkeelta, tekee laskun, ja palauttaa sivun jolla on vastaus.
pw2.6 Vapaaehtoinen: Uusi viesti. Lähetä Flaskilla flash() viestejä, eli sellaisia jotka näytetään seuraavalla sivulla, jolle käyttäjä menee.
pw2.7. Vapaaehtoinen, vaikea: CRUD. Tee jokin CRUD-ohjelma Flaskilla. Siis sellanen, jossa voi luoda (Create), lukea (Read), päivittää eli muokata (Update) ja poistaa (Delete) tietueita.
Vinkki: listan näyttäminen muotin silmukassa
{% for person in persons %}
<p>{{ person }}</p>
{% endfor %}
Vinkki: Numeroita lomakkeelta:
from flask import request
...
@app.route("/", methods=["GET", "POST"])
# ...
if "x" in request.form:
x = int(request.form["x"])
print(x)
pw3 orm - Luokista lomakkeet ja tietokannat
pw3.1 Flash. Tee Flask-ohjelma, jossa kahdesta linkistä voi lähettää eri flash-viestit.
pw3.2 Automaattinen tietokanta ja lomake. Tee yksinkertainen Flask-ohjelma, joissa on tietokanta. Tee tietokanta ja lomakkeet automaattisesti luokasta (db.create_all(), model_form()). Voit laittaa testidatan suoraan Python-ohjelmastasi, näiden lomakkeiden ei vielä tarvitse lisätä tietoa tietokantoihin. Opettele tällainen ohjelma ulkoa, niin että osaat kirjoittaa vastaavan katsomatta mallista.
pw3.3. Vapaaehtoinen, vaikea: CRUD olioilla. Tee jokin CRUD-ohjelma Flaskilla, käyttäen ORM:ia. Siis sellanen, jossa voi luoda (Create), lukea (Read), päivittää eli muokata (Update) ja poistaa (Delete) tietueita. Käytä ORM:a, eli db.create_all() ja model_form().
pw4 CRUD - Kokonainen tietokantaohjelma wepissä
pw4.1 Osoitekirja. Tee osoitekirja/kontaktien hallinta/asiakasrekisteri. CRUD, eli wepistä pitää pystyä luomaan, lukemaan, päivittämään ja poistamaan tietueita. Tallenna tietokantaan ainakin nimi, sähköposti ja puhelinnumero. Voit itse päättää, mitä muita kenttiä haluat tallentaa. Opettele tällainen ohjelma ulkoa niin, että osaat kirjoittaa vastaavan ohjelman katsomatta mallista.
pw4.2 Vapaaehtoinen: Lainasto. Tee lista, jolla voit itse pitää kirjaa, mitä esineitä olet lainannut kellekin. Tässä riittää, että tietokanta on vain omaan käyttöösi. Siinä ei siis tarvitse olla omaa liittymää lainaajille. CRUD.
pw4.3 Vapaaehtoinen: Mun CRUD. Tee oma CRUD-ohjelma itse keksimästäsi aiheesta.
Tehtävänanto on valmis, eikä siihen tule enempää kohtia.
pw5 Users - Käyttäjät ja salasanat
pw5.1 Book160 - kirjan juoni 160 merkillä. Kaikki saavat lukea, kirjautuneet käyttäjät saavat kirjoittaa uusia juonia. (Tämä tehtävä summaa mukavasti koko kurssin CRUD:sta käyttäjiin)
pw5.2 Projektin tarkoitus. Varaa projektisi tarkoitus tämän sivun kommentiksi. Eli yhdellä englanninkielisellä virkkeellä projektin tarkoitus.
Vinkkejä pw5.2:
- Siis se business purpose, what's in it for me, mitä tämä tekee ja kenelle. Sellainen tarkoitus, jonka on olemassa ilman tekniikoita.
- Kommentit tulevat näkyviin, kun olen käynyt hyväksymässä ne, eli ei huolta vaikka eivät ilmesty samana päivänä.
Palautus ma 08:00 mennessä. Hauskaa hakkerointia.
pw6 Deploy - Tuotantoasennus
pw6.1 Asenna Python Flask -ohjelmasi julkiselle palvelimelle. Valitse ohjelma, jossa on käyttäjät ja CRUD.
pw6.2 Oma projekti. Omat projektit esitellään ylihuomenna, työstä omaa projektia eteenpäin.
Vinkkeä:
- Molemmat tehtävät ovat haastavia. Käydään huomenna yhdessä vaikeita kohtia läpi.
pw7 Project & all - kaikki tänne
pw7.1 Katso, että olet jokaisessa tehtävässä / lähdekoodissa viitannut käyttämiisi lähteisiin: kurssiin, tehtävänantoon, toisten raportteihin, mallikoodeihin, stackoverflow-vastauksiin... (Tästä pw7.1-kohdasta ei palauteta mitään, lisäät vain lähteet niihin muihin palautuksiin)
pw7.2 Palauta yksi linkki sivuun, josta löytyy linkkeinä 1) jokaisen kotitehtävän palautus 2) projektisi lähdekoodi 3) projektisi demo (eli se tuotantotyyppinen asennus kokeiltavaksi)
Palautus 08:00. Huomenna aloitamme 09:30.
Projektista
Ensin valmista, sitten hienostelua. Tee ensin yksinkertainen ja toimiva projekti. Kun se toimii, laita toimiva versio talteen (ja julkaise, jos jo osaat). Ja vasta sen jälkeen hienostelua, bonuksia ja kurottelumaaleja.
Vaatimukset
- Python Flaskilla, käyttää tietokantaa
- Tarkoitus - business purpose, what's in it for me... Sellainen tarkoitus, jonka on olemassa ilman tekniikoita.
- Pitää pystyä käyttämään ilman opastusta
- Julkisella palvelimella oikeassa Internetissä (opetetaan maanantaina)
Etusivulla, taitoksen yläpuolella
- Tarkoitus. Yhden lauseen kuvaus (tarkoitus, business purpose, what's in it for me)
- Ruutukaappaus
- Demon linkki
- Lisenssi (esim. vapaista lisensseistä suosittelen "GNU General Public License 2". Voit lisensoida haluamallasi tavalla.)
- Kuinka valmis tämä on (alpha, beta, ... ja kuvaus ihmisten kielellä)
- Download-nappi
- Viittaus kurssiin olisi kiva
Vinkkejä
- Tee ja julkaise toimiva ydinjuttu ensin. Sellainen, joka täyttää nuo vaatimukset yllä.
- Muitakin tekniikoita saa käyttää, kunhan ydinasia on tehty Python Flaskilla. Esimerkiksi tyylisivuja, JavaScriptia tai mitä vain tekniikoita. Jos aika riittää ja sopivaa osaamista on kurssin ulkopuolelta, oman HTTP-rajapinnan kautta voi helposti yhdistää muita ohjelmia ja sulautettuja laitteita.
- Lisensseistä GPL (GNU General Public License) on suositus. Voit päättää lisenssin itse. Jotkut käyttävät myös MIT-lisenssiä.
- Jos aikaa ja energiaa riittää, hienoista lisäjutuista saa hienoja lisäpisteitä. Mutta toimiva ydintuote kannattaa julkaista ensin. Hauskoja ylimääräisiä bonareita toimivan julkaisun jälkeen ovat muutama oikea käyttäjä (ja palautteen keruu), jokin lisätekniikka tai integraatio (PayPal/Stripte tms maksu; MailGun, SendGrid tms sähköpostin lähetys) tai uusi Flaskin ominaisuus.
Osaamistavoiteet
Rakenna weppipalvelu Pythonilla ja asenna se julkiselle palvelimelle.
Opit tekniikan, joka
- palvelee asiakkaita Linuxilla, Macilla, Windowsilla, iPhonella, Androidilla - millä vain selaimella
- kerää itsestään tietoa siitä, miten palveluasi käytetään
- antaa monien käyttäjien muokata tietoja yhtä aikaa (aika tavallinen vaatimus yritysten ohjelmissa)
- toimii käyttäjillä asentamatta mitään
- käyttää automaattisesti uusinta versiota ohjelmastasi
Opintojakson suoritettuaan opiskelija
- Osaa ohjelmoida www-palvelimella ajettavan ohjelman, jota voi käyttää millä vain selaimella
- Osaa tallentaa tiedot tietokantaan niin, että useampi käyttäjä voi katsella ja muokata tietoja samaan aikaan
- Osaa asentaa tarvittavat palvelimet Linuxille
- Osaa vuokrata julkaisuun tarvittavat pilvipalvelut
- Ymmärtää palvelinpään wwww-ohjelmoinnin edut ja toimintaperiaatteen
Intensiivikurssi: Kurssi edellyttää 100% etäläsnäoloa koko kurssin ajan ma-pe 9-16 ja ma-ke 9-16.
Lähtötaso ja sidonnaisuudet muihin opintojaksoihin
Kurssille tullessa pitää osata
- Linuxin alkeet (Linuxin asennus, Linuxin käyttö komentokehotteesta, palvelinten eli demonien asentaminen)
- Ohjelmoinnin alkeet millä vain kielellä: muuttuja, funktio, if-else, silmukka, luokka, olio...
- Puhua suomea ja lukea englantia
Tarvittavat taidot on voinut hankkia esimerkiksi kursseilla "Linux palvelimena" ja millä tahansa ohjelmoinnin alkeiskurssilla. Esitiedot tarkistetaan tarvittaessa alkutestillä tai -haastattelulla. Kurssille tullessa ei tarvitse osata Pythonia.
Kurssi toteutetaan 100% etäopetuksena. Osallistumiseen tarvitaan Linux, Internet-yhteys, videokamera, kuulokkeet ja mikrofoni. Palvelimen vuokraamiseen pilvestä tarvitset noin viisi euroa (tai voit käyttää ilmaisia Github Education -palveluita, jos sinulla on niitä käyttämättöminä). Kurssille tullessa opiskelijalla olisi hyvä olla Linux asennettuna itselle. Myös virtuaalikoneeseen asennus käy. Ilmoittautuneet saavat ohjeen ympäristön asentamisesta.
Sisältö
- Yleiskuva
- Hei maailma!
- Hei Weppi
- Käyttäjän syötteet ja lomakkeet
- Tietokannat ja SQL
- ORM eli automaattiset lomakkeet ja tietokannat
- Tuotantopalvelin
- Pilvipalvelimen vuokraaminen
- Oma miniprojekti
Sisällössä on toteutuskohtaisia muutoksia, aikataulu kehittyy vielä toteutuksen aikana.
Arviointikriteerit
Taso 1: Opiskelija osallistuu opetukseen ja tekee tehtävät. Opiskelija pystyy esimerkeistä muokkaamalla tekemään yksinkertaisia, omia verkkopalveluita. Tietoturvan minivaatimusten noudattaminen onnistuu esimerkiksi käyttämällä hyviä salasanoja.
Taso 3: Opiskelija täyttää alempien tasojen kriteerit. Opiskelija pystyy tekemään yksinkertaisia palvelimella ajettavia weppiohjelmia, joilla on selkeä käyttötarkoitus. Ohjelmien sovittaminen onnistuu siten, että ne palvelevat luontevasti pääasiallista käyttötarkoitustaan.
Taso 5: Opiskelija täyttää alempien tasojen kriteerit. Opiskelija pystyy soveltamaan opittuja tekniikoita. Opiskelija osaa hankkia lisää tietoa eri lähteistä ja ratkaista vastaantulevia ongelmia. Sovelluksilla on ilmeinen käyttötarkoitus, jota tehdyt valinnat palvelevat. Sovellusten käyttö on helposti ymmärrettävää tai ilmeistä ilman tekijän erillistä neuvontaa. Asennukset on tehty turvallisesti, järkevästi ja ylläpidettävästi.
Palautteen hyödyntäminen
Kurssilla on hyödynnetty palautetta aiemmilta kursseiltani. "Go-ohjelmointi" on saanut huipppupalautteen 4.9/5 kiitettävä. "Go ohjelmointi" osoitti, että intensiivikurssi riittää uuteen kieleen tutustumiseen ja sen käyttöön miniprojektissa. Kurssin tekniikoita on kokeiltu alustavasti myös projektikursseilla ja kurssilla "Linux palvelimet".
Tällä kurssilla kerätään kokemuksia tuleville Python-kursseille.
Opiskelijoiden toiveiden mukaisesti teoria opetetaan tietokoneiden ääressä käytännön esimerkkien yhteydessä. Opettajakeskeinen opetus ja opiskelijoiden lyhyet tuntiharjoitukset vuorottelevat. Harrastuneisuutta tuetaan ja opiskelijoita kannustetaan taitojen välittömään kokeiluun kurssin ulkopuolella. Kurssilla syntyvien raporttien julkaisemiseen ja vapaaseen lisensointiin kannustetaan.
Palautetta, kommentteja, vanhoja arvioitavia laboratorioharjoituksia ja linkkejä kotitehtävien esimerkkiratkaisuihin mainituilta kursseilta (mm. "Go ohjelmointi", "Linux palvelimet"):
Lisätietoja
Nimi: Python weppipalvelu - ideasta tuotantoon
Koodi: ICT8TN034-3001
Opettaja: Tero Karvinen
Ajoitus: 2021-05-24 w21 ma ... 2021-06-02 w22 ke.
Ilmoittautumisaika: 2021-03-05 08:00 - 2021-03-25 16:00
Ryhmä:
Toteutustapa: ONLINE - edellyttää 100% etäläsnäoloa.
Paikkoja: 15 - 30
Koulutusohjelma: HETI Tietojenkäsittelyn koulutusohjelma
Arviointitavat: 1-5
Opintopistemäärä: 5 op
Vastuuyksikkö: Digitalous
Kurssi kestää 8 arkipäivää, joka päivä 9-16. Edellyttää 100% etäläsnäoloa. Kurssi päättyy kokonaan w22 keskiviikkona, sen jälkeen ei saa eikä tarvitse palauttaa mitään.
Linkkejä
Official Flask 1.0 documentation , start from QuickStart
Opinto-jakson kuvaus opinto-oppaassa
Tämä sivu päivittyy jatkuvasti.