Il protocollo HTTP è il fondamento della comunicazione dei dati nel web. In questo protocollo sono definiti diversi metodi utilizzati per recuperare i dati dall'URL indicato.
Nella tabella seguente sono riepilogati i vari metodi HTTP, fondamentali da conoscere per lavorare adeguatamente con Flask:
Metodo | Descrizione |
GET | Invia i dati in modo non crittografato al server. È il metodo più utilizzato. |
HEAD | Uguale a GET, ma senza corpo di risposta |
POST | Utilizzato per inviare i dati del modulo HTML al server. I dati ricevuti dal metodo POST non vengono memorizzati nella cache dal server. |
PUT | Sostituisce tutte le rappresentazioni correnti della risorsa di destinazione con il contenuto caricato. |
DELETE | Rimuove tutte le rappresentazioni correnti della risorsa di destinazione fornite da un URL |
Di default le rotte di Flask utilizzano richieste di tipo GET
. Tuttavia, questo comportamento può essere modificato passando appositi parametro al decoratore route()
.
Form HTML con POST in Flask
Ora proveremo a creare un semplice modulo (form) con Flask per passare i dati utilizzando il metodo POST
all'interno di una rotta.
Come prima cosa andiamo a creare un file HTML, che chiameremo form.html
, con all'interno un semplice modulo con un campo testuale e un bottone:
<html>
<head>
<title>Modulo Flask</title>
</head>
<body>
<form action="http://localhost:5000/inviadati" method="POST">
<p>Nome utente:</p>
<p><input type="text" name="username" /></p>
<p><input type="submit" value="Invia" /></p>
</form>
</body>
</html>
Ora andiamo a creare un file Python con il seguente codice all'interno:
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/dashboard/<nome>')
def pannello(nome):
return 'Benvenuto %s' % nome
@app.route('/inviadati', methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['username']
return redirect(url_for('pannello', nome = user))
else:
user = request.args.get('username')
return redirect(url_for('pannello', nome = user))
if __name__ == '__main__':
app.run(debug = True)
Dopo l'avvio dell'esecuzione del server di sviluppo, aprire login.html nel browser, immettere il nome nel campo di testo e fare clic su Invia.
I dati del modulo vengono inviati alla clausola URL in azione del tag del modulo.
http://localhost/form
è mappato alla funzione login()
. Poiché il server ha ricevuto i dati con il metodo POST
, il valore del parametro 'username
' ottenuto dai dati del modulo viene ottenuto da:
user = request.form['username']
Viene passato all'URL '/success
' come parte variabile. Il browser visualizza un messaggio di benvenuto nella finestra.
Modificare il parametro del metodo in 'GET
' in form.html
e riaprirlo nel browser. I dati ricevuti sul server sono con il metodo GET
. Il valore del parametro 'nm' è ora ottenuto da:
User = request.args.get(‘username’)
Qui, args
è un oggetto dizionario contenente un elenco di coppie di parametri di modulo e il suo valore corrispondente. Il valore corrispondente al parametro 'nm
' viene passato all'URL '/success
' come prima.