Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Un Python Web Server su Raspberry Pi

Impariamo ad implementare un semplice Web server sfruttando il linguaggio Python e la single board Raspberry Pi
Impariamo ad implementare un semplice Web server sfruttando il linguaggio Python e la single board Raspberry Pi
Link copiato negli appunti

Python è un linguaggio di programmazione estremamente popolare. Questo perché risulta essere facile da apprendere e può essere sfruttato per realizzare qualsiasi tipo di applicazione. Spesso si sente parlare di Python per quanto concerne le soluzioni di Machine Learning e gli applicativi che implementano delle intelligenze artificiali. Inoltre Python è molto utilizzato nella domotica e nei sistemi IoT (Internet of Things) per i quali esistono svariati script e framework dedicati.

In questo tutorial dimostreremo la versatilità di Python realizzando un piccolo Web Server ospitato all'interno di un Raspberry Pi. Nel dettaglio sfrutteremo Flask, un micro-framework Web open source scritto in Python.

Tale progetto ha ovviamente un mero scopo didattico e si pone l'obbiettivo di instradare l'utente ad uno studio più approfondito di Python. Impareremo infatti ad installare i pacchetti e le librerie del linguaggio su una distribuzione Linux e a realizzare una semplice Web application con Flask.

Installare Python 3, pip e Flask su Raspberry Pi OS

Raspberry Pi OS

Daremo per scontato che l'installazione di Raspberry Pi OS, la distribuzione Linux di riferimento del progetto, sia stata già effettuata e che l'utente disponga di un dispositivo funzionante. Quindi iniziamo accertandosi che nel sistema siano presenti IDLE e Python 3, apriamo bash e digitiamo:

sudo apt install python3 idle3

Ora è necessario reperire e configurare pip, un tool che consente il download e l'installazione rapida e semplificata delle librerie Python. Tali software vengono scaricati dai server PyPI (Python Package Index), repository universale che funge da archivio per il linguaggio.

Torniamo ora nella shell e scriviamo:

sudo apt install python3-pip

Dopo questo comando il gestore di pacchetti APT (Advanced Packaging Tool) scarica e configura tutte le dipendenze necessarie al corretto funzionamento del tool.

Utilizzare pip è davvero semplice, ecco un esempio di installazione:

sudo pip3 install nomedelprogrammapython

mentre in questo modo è possibile tenere aggiornate le librerie:

sudo pip3 install --upgrade nomedelprogrammapython

Procediamo dunque all'installazione di Flask:

sudo pip3 install flask

Configurare il Web Server con Flask su Raspberry Pi OS

Ora che abbiamo completato la fase iniziale del nostro setup possiamo dare il via alla configurazione del Web server con Flask. Ritorniamo nella shell e creiamo una nuova directory dedicata al nostro progetto:

mkdir progettopython

cd progettopython

Adesso apriamo IDLE dal menu di sistema di Raspberry Pi OS e generiamo un nuovo file, chiamandolo per esempio nuovapp.py, nella directory creata poco prima.

python 3 idle

È quindi giunto il momento di popolare il file incollando questo semplice script:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return 'Ciao'
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Salviamo poi le modifiche tramite la combinazione di tasti CTRL+S.

Siamo quindi pronti per eseguire lo script da bash:

nuovapp.py

Se il codice è stato riportato i mondo corretto si dovrebbe ottenere un output come il seguente:

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 123-456-789

Spostiamoci quindi nel browser Web e digitiamo questa URL nella barra degli indirizzi:

http://127.0.0.1:5000/

Ora si dovrebbe visualizzare una pagina Web bianca con la scritta "Ciao".  Questo significa che il server è operativo.

Volendo si può aggiungere una nuova pagina. Per farlo ci affideremo ad una route. Le route è sostanzialmente una patch all'interno del sito web. Questa viene determinata dall'URL digitato nel browser dall'utente. Tale elemento è generato da tre componenti:

  • @app.route('/') che determina l'entry point. Nello script infatti abbiamo impostato questo valore come '/', ovvero la root directory del Web server corrispondente all'indirizzo 127.0.0.1:5000;
  • def() si tratta dell'identificativo della route, in questo caso abbiamo scelto index;
  • return ovvero il contenuto della pagina Web dove viene stampata la parola 'Ciao'.

La seconda ed ultima parte del programma gestisce invece l'esecuzione vera e proprio del Web server. Proviamo ora ad aggiungere una nuova pagina tramite l'inclusione di una route addizionale che chiameremo pasta. Ritorniamo all'interno di IDLE ed incolliamo questo esempio:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return 'Ciao'
@app.route('/pasta')
def pasta():
    return 'Viva la pasta!'
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Salviamo le modifiche e riavviamo lo script. Quindi digitiamo nel browser questo URL:

http://127.0.0.1:5000/pasta

Aggiungere le pagine HTML al Web server Python

In genere i Web server ospitano pagine scritte in linguaggi come HTML e CSS. Per creare una pagina HTML è necessario generare un elemento chiamato template destinato ai contenuti statici. Andiamo quindi ad aggiungere una sotto-directory chiamata templates nella cartella progettopython:

mkdir templates

Generiamo poi un nuovo file da IDLE, index.html, e salviamo il tutto nella nuova directory:

<html>
    <body>
        <h1>Il mio nuovo sito web</h1>
    </body>
</html>

Quindi procediamo alla modifica dello script in questo modo:

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')
@app.route('/pasta')
def pasta():
    return 'Viva la pasta!'
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

Come sicuramente avrete notato, abbiamo indicato allo script di sfruttare la funzione render_template e successivamente modificato index() in modo che venisse visualizzato il file HTML della cartella templates.

Con questo setting è ora molto più semplice modificare le pagine del Web server agendo direttamente sul codice HTML, senza alterare ulteriormente lo script Python.

Per verificare se tutto è andato a buon fine si può caricare la pagina HTML dall'URL:

http://127.0.0.1:5000/

Come output si dovrebbe ricevere una pagina bianca con la scritta "Il mio nuovo sito web". Per aggiungere nuove pagine basta creare nuovi file HTML nella cartella templates e modificare di conseguenza le route in modo che vadano di volta in volta a caricare le pagine HTML.

Impostare un background CSS

Ovviamente per personalizzare il nostro nuovo sito è possibile sfruttare CSS in modo da adottare uno schema di colori su più pagine HTML. Generiamo una sotto-directory chiamata static sempre nella cartella progettopython:

mkdir static

Ora andiamo scrivere un nuovo file, style.css, nella directory:

body {
background: green;
color: blue;
}

Includiamo poi il file CSS in index.html:

<html>
    <head>
        <link rel="stylesheet" href='/static/style.css' />
    </head>
    <body>
        <h1>Il mio nuovo sito web</h1>
    </body>
</html>

Salviamo la modifica e, ricaricando la pagina Web aperta poco prima, dovremmo vedere applicati i cambiamenti cromatici desiderati.

Ti consigliamo anche