Siti Statici e Dinamici

Enrico Bacis       Marco Rosa

Università degli Studi di Bergamo

 

 

github pages = free (static) hosting

Static website generators

a.k.a. in medio stat virtus

Frontend vs Backend

Python FAQ

  • Perché non PHP ?
     
  • Perché non ruby ?
     
  • Perché non java ?
     
  • Perché non nodejs, .NET, scala ?!
     
  • Perché sempre python?
     
  • è una persecuzione!

Free Python hosting

Why flask?

  • Microframework (core + extensions)
     
  • Easy to code
     
  • Easy to configure
     
  • Excellent documentation
     
  • Will not take decisions for you
  • Model   salvataggio / caricamento dati (db)
     
  • View      presentazione dei dati all’utente (templates)​
     
  • Controller    codice che gestisce effettivamente una richiesta HTTP: effettua operazioni sul model, riempe i templates e invia una risposta all'utente

hello, world!

from flask import Flask     # si importa Flask

app = Flask(__name__)       # si crea l'app (__name__ su pythonanywhere)

@app.route('/')             # si crea un instradamento (route) di default ('/')
def root():                 # la funzione (ossia il controller) da eseguire
    return "hello, world!"  # deve tornare una stringa (il response body)

app.run(host="0.0.0.0", port=5000)   # avvia il server

6 lines of code and it works

Templates

  • return HTML

  • pass variables

  • conditionals (if)

  • loops (for)

Esercizio Templates

  • creare una route "/supermarket" che mostri una tabella dei prodotti disponibili (nome prodotto, costo)

  • Per i prodotti gratuiti mostrare "free" in grassetto

  • Per gli altri stampare mostrare "x €"

  • Applicare stili a piacere

  • Eseguire su pythonanywhere

prices = {'strawberry': 2.0, 'lemon': 1.0, 'bitcoin': 7000.0, 'spam': 0}

Passaggio di parametri

GET e POST

mycontroller

mycontroller

mycontroller

mycontroller

Esercizio GET

  • creare una route "/getprice/<product>" che restituisca il prezzo del prodotto oppure un messaggio a piacere se il prodotto non c'è

  • Applicare stili a piacere

  • Eseguire su pythonanywhere

prices = {'strawberry': 2.0, 'lemon': 1.0, 'bitcoin': 7000.0, 'spam': 0}

Esercizio POST

  • creare una route "/calculator" che agisca come una calcolatrice (2 campi input nella form e calcolo della somma)

  • Applicare stili a piacere

  • Eseguire su pythonanywhere

Esercizio POST II

  • creare una route "/notes" che:

    • Mostri in un elenco le note presenti nella lista

    • Abbia una form che permetta di aggiungerne

  • Applicare stili a piacere

  • Eseguire su pythonanywhere

notes = []

E quando riavvio

il server?

SQLite

import sqlite3

notesdb = "notes.db"

def init_notes_db(reset=False):

    connection = sqlite3.connect(notesdb)

    if reset:
        connection.execute("DROP TABLE IF EXISTS notes;")

    connection.execute("CREATE TABLE IF NOT EXISTS notes (data VARCHAR)")

    connection.commit()
    connection.close()

init_notes_db()

Esercizio SQLite

  • Rifare l'esercizio "/notes" utilizzando un
    database SQLite

  • Eseguire su pythonanywhere

Esercizio SQLite II

  • Creare una tabella nel database con 2 campi: data e userid

  • Creare la route "/secret/<userid>" che mostri e salvi solo le note per quell'userid

  • Eseguire su pythonanywhere

Hints

  • E se mettessimo un doppio apice come utente?
     
  • Perché fa così?
     
  • Come faccio a fare una condizione vera?
     
  • (e con sintassi valida)

Siti Statici e Dinamici

By Enrico Bacis

Siti Statici e Dinamici

Introduzione a Flask

  • 602