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.

Kurssin moodle-sivu

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

https://TeroKarvinen.com

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

Kurssin moodle-sivu

Opinto-jakson kuvaus opinto-oppaassa

Tämä sivu päivittyy jatkuvasti.