Metodi HTTP in Flask

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 […]

Avatar di gbfactory
gbfactory 6 Luglio 2022

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:

MetodoDescrizione
GETInvia i dati in modo non crittografato al server. È il metodo più utilizzato.
HEADUguale a GET, ma senza corpo di risposta
POSTUtilizzato per inviare i dati del modulo HTML al server. I dati ricevuti dal metodo POST non vengono memorizzati nella cache dal server.
PUTSostituisce tutte le rappresentazioni correnti della risorsa di destinazione con il contenuto caricato.
DELETERimuove 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.