Python - Routing

Il routing è il meccanismo di mappatura dell'URL direttamente al codice che crea la pagina web. Aiuta a gestire meglio la struttura della pagina web e aumenta notevolmente le prestazioni del sito e ulteriori miglioramenti o modifiche diventano davvero semplici. In Python il routing è implementato nella maggior parte dei lavori sui frame web. Vedremo gli esempi daflask framework web in questo capitolo.

Routing in Flask

Il route()decorator in Flask viene utilizzato per associare un URL a una funzione. Di conseguenza, quando l'URL viene menzionato nel browser, la funzione viene eseguita per fornire il risultato. Qui, URL'/hello' regola è vincolata alla hello_world()funzione. Di conseguenza, se un utente visitahttp://localhost:5000/ URL, l'output di hello_world() la funzione verrà visualizzata nel browser.

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
   return 'Hello Tutorialspoint'
if __name__ == '__main__':
   app.run()

Quando eseguiamo il programma sopra, otteniamo il seguente output:

* Serving Flask app "flask_route" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [06/Aug/2018 08:48:45] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -

Apriamo il browser e puntiamo all'URL http://localhost:5000/ per vedere il risultato della funzione in esecuzione.

Utilizzo di variabili URL

Possiamo trasmettere variabili URL utilizzando route per creare URL al volo. Per questo usiamo la funzione url_for () che accetta il nome della funzione come primo argomento e il resto degli argomenti come parte variabile della regola URL.

Nell'esempio seguente passiamo i nomi delle funzioni come argomenti alla funzione url_for e stampiamo il risultato quando queste righe vengono eseguite.

from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index(): pass
@app.route('/login')
def login(): pass
@app.route('/user/
      
       ') def profile(username): pass with app.test_request_context(): print url_for('index') print url_for('index', _external=True) print url_for('login') print url_for('login', next='/') print url_for('profile', username='Tutorials Point') 
      

Quando eseguiamo il programma sopra, otteniamo il seguente output:

/
http://localhost/
/login
/login?next=%2F
/user/Tutorials%20Point

Reindirizzamenti

Possiamo utilizzare la funzione di reindirizzamento per reindirizzare l'utente a un altro URL utilizzando il routing. Menzioniamo il nuovo URL come valore di ritorno della funzione che dovrebbe reindirizzare l'utente. Questo è utile quando deviamo temporaneamente gli utenti a una pagina diversa quando stiamo modificando una pagina web esistente.

from flask import Flask, abort, redirect, url_for
app = Flask(__name__)
@app.route('/')
def index():
    return redirect(url_for('login'))
@app.route('/login')
def login():
    abort(401)
#    this_is_never_executed()

Quando viene eseguito il codice sopra, l'URL di base va alla pagina di accesso che utilizza la funzione di interruzione in modo che il codice per la pagina di accesso non venga mai eseguito.