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 | %s | Qualsiasi testo senza slash (predefinito) |
int | %d | Numero intero positivo |
float | %f | Numero decimale positivo |
path | %s | Come 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
".