Tero Karvisen opissa saadut etätehtävät MarkDownilla tallennettuna (Cheatsheet):
Kun on tarvetta samanaikaisuuden hallinnalle rinnakkaisilla säikeillä (thread) ei arkkitehtuurisissa valinnoissa välttämättä kannattane suosia siltä osin Pythonia. Pythonissa ei ole erikseen public / private / protected metodeja eikä myöskään ole mitään gettereitä ja settereitä vaan attribuuttia voi käyttää suoraan. Python on niin sanotusti tyypittämätön kieli vaikka siellä tyypit ovatkin tuettu (vaihtuvat lennosta).
Hibernate <--> Java <--> Thymeleaf
& Html + CSS + JavaScript
--> SPA: React (VueJS visualisoinneille) <--> Contentful (GatsbyJS & GraphQL)
- AWS / Azure / Gcloud / Oracle cloud
- Python analytiikkaan
SQLAlchemy <--> Python <--> Flask (Jinja2)
& Html + CSS + JavaScript
--> SPA: React (VueJS visualisoinneille) <--> Contentful (GatsbyJS & GraphQL)
- AWS / Azure / Gcloud / Oracle cloud
- Python analytiikkaan
DB: Pythonille SQLAlchemy (ORM) <--> PostgreSQL
sudo apt install python3-flask-sqlalchemy
(jolla myös web-sivun lomakkeet
from wtforms.ext.sqlalchemy.orm import model_form
from flask_wtf import FlaskForm)
BE: Python (Object-oriented programming)
sudo apt update
sudo apt upgrade
sudo apt install python3
#Valinnainen https://en.wikipedia.org/wiki/IPython (toimii Anacondan mukana tulevan Jupyter Notebookin tavoin "input" & "output")
#sudo apt install ipython3
FE: Pythonille Djangon "kilpailija" Flask (sisältää Jinja2 HTML-muottimoottorin) fronttiin
sudo apt install python3-flask
Perusaloitusrunko
#Kerrotaan mistä kirjastosta (kirjastojen nimet pienellä alkukirjaimella) tuodaan haluttu luokka hyödynnettäväksi (luokkien nimet isolla alkukirjaimella)
from flask import Flask
#Flask-luokan konstruktori ottaa parametrikseen main-metodin
app = Flask(__name__)
#Endpoint
@app.route('/nettiosoite')
#Funktiot määritellään avainsanalla def ja lohko aloitetaan kaksoispisteellä
def controller():
#Funktion sisältämän lohkon sisennys on syntaksissa pakollista
return "Moikka moi!"
#Jos tiedostoa ajetaan suoraan komentoriviltä (eikä ole esim. importattu ipython3:seen)
if __name__ == "__main__":
#Käynnistä paikallinen kehityspalvelin
app.run(debug=True, port=8888)
#Käynnistyttyään vastaanottaa kutsun endpointissa
http://127.0.0.1:8888/nettiosoite
Pilvipalveluja: Linode, Digital Ocean, Hetzner jne.
Deplpyment Pythonille mod_wsgi <--> Apache2
Pythonin perussyntaksi versiolla 1.0 on avattu juurta jaksaen suomenkielellä sijainnissa https://web.archive.org/web/20180517070419/http://www.cs.hut.fi/~ttsirkia/Python.pdf
Vaikka Pythonin web frameworkin Flaskin versio 2.0 on jo julkaistu kannattanee silti vielä jonkun aikaa toimia aiemmalla versiolla https://flask.palletsprojects.com/en/1.0.x/quickstart/
pw1.1 (Hei maailma): HTML
https://github.com/mikalegall/flask/blob/main/hello_html/index.html
pw1.2 (Hei maailma) & pw1.4 (koodin kommentointi) : Flask ja kommentointi
https://github.com/mikalegall/flask/blob/main/hello_flask/hello.py
pw1.3 (Hei maailma): Python
https://github.com/mikalegall/flask/blob/main/hello_python/hello.py
https://github.com/mikalegall/flask/tree/main/print_user_input
https://github.com/mikalegall/flask/tree/main/tuplamuotti
https://github.com/mikalegall/flask/tree/main/print_list_for_in
https://github.com/mikalegall/flask/tree/main/form_minimum
https://github.com/mikalegall/flask/tree/main/flash_multiple
https://github.com/mikalegall/flask/tree/main/form
https://github.com/mikalegall/flask/tree/main/wannabe_crm
https://github.com/mikalegall/flask/tree/main/book160
https://github.com/mikalegall/flask/tree/main/deployment
https://github.com/mikalegall/flask/tree/main/technical_analysis