Variabili negli URL in Flask

Contenuto1 Tipi di dato2 URL Canonici in Flask In Flask è possibile costruire gli URL in modo dinamico, passando delle parti variabili al parametro rule del decoratore route. La parte […]

Avatar di gbfactory
gbfactory 20 Gennaio 2022

In Flask è possibile costruire gli URL in modo dinamico, passando delle parti variabili al parametro rule del decoratore route. La parte variabile viene indicata come <nome-variabile> ed è passata come parametro alla funzione associata al decoratore in questione.

Nell'esempio che segue, il parametro rule del decoratore route() contiene una variabile <nome> come parte dell'URL, che viene inserita dopo lo slash nel decoratore e passata come parametro alla funzione pagina_utente().

from flask import Flask
app = Flask(__name__)

@app.route('/utente/<nome>')
def pagina_utente(nome):
  return 'Benvenuto %s!' % nome

if __name__ == '__main__':
  app.run(debug = True)

Ora salviamo il nostro programma in ed eseguiamo lo script con Python dal terminale per provare il funzionamento dell'applicazione.

Possiamo quindi connetterci tramite il nostro browser al seguente URL e vedere cosa appare nella pagina:

http://127.0.0.1:5000/utente/PincoPallino

Sulla pagina verrà visualizzata la stringa "Benvenuto PincoPallino". Possiamo osservare, quindi, come la variabile venga estratta dalla barra dell'URL e visualizzata sulla pagina.

Tipi di dato

Nella nostra applicazione di esempio abbiamo passato una stringa utilizzando il placeholder %s, tuttavia possono essere utilizzati anche altri tipo di dati:

string%sQualsiasi testo senza slash (predefinito)
int%dNumero intero positivo
float%fNumero decimale positivo
path%sCome la stringa ma accetta anche slash

Ecco di seguito un esempio in cui vengono utilizzati anche gli altri tipi di dato:

from flask import Flask
app = Flask(__name__)

@app.route('/articolo/<int:id_articolo>')
def visualizza_articolo(id_articolo):
   return 'Articolo numero %d' % id_articolo

@app.route('/revisione/<float:num_rev>')
def visualizza_revisione(num_rev):
   return 'Revisione numero %f' % num_rev

if __name__ == '__main__':
   app.run()

Se eseguiamo lo script con Python e proviamo ad andare alla pagina http://127.0.0.1:5000/articolo/38 con il nostro browser, il numero che inseriamo nell'URL verrà passato come parametro alla funzione visualizza_articolo() e di conseguenza vedremo il seguente output:

Articolo numero 38

Proviamo invece ora a visitare la pagina http://127.0.0.1:5000/revisione/3.8 e ad osservare il risultato. Dovrebbe essere simile a questo:

Revisione numero 3.800000

URL Canonici in Flask

Gli URL di Flask sono basati sul modulo routing di Werkzeug. Questo assicura che gli URL siano unici e basati sugli standard già stabiliti da Apache.

Prendiamo in considerazione le due rotte stabilite nel seguente script:

@app.route('/pagina1')
def prima_pagina():
   return 'Questa è la Pagina 1!'

@app.route('/pagina2/')
def seconda_pagina():
   return 'Questa è la Pagina 2!'

Entrambe le regole sembrano simili, ma nella seconda rotta abbiamo inserito uno slash alla fine dell'URL, facendo così diventare quell'URL un URL Canonico. Quindi se un utente inserisce nella barra del browser "/pagina2" oppure "/pagina2/" sarà sempre visualizzato l'output della funzione seconda_pagina(). Mentre nel primo caso, se un utente visita "/pagina1/", vedrà un Errore 404 e la pagina sarà visibile solamente rimuovendo lo slash finale: "/pagina".