Autore: Fabio Di Matteo
Ultima revisione: 26/10/2022 - 12:15
Se si volessero creare delle rotte automatiche basate sui nomi di file degli script Python si potrebbe avere un'approccio come il seguente:
#!/usr/bin/env python3 import os from bottle import Bottle,route, run, template, static_file, request,redirect, response,get, post global app app=Bottle() PORT=8080 DOCUMENTROOT="./htdocs" def start_server(): run(app , host='0.0.0.0', port=PORT, reloader=True) def runScript(filename): code=open(DOCUMENTROOT+os.sep+filename).read() exec(code) global html return html app.route("/<filename:path:*.py>", ['GET', 'POST'], runScript) @app.route("/") def home(): redirect("/index.py") start_server()
LE pagine (script Python) devono essere messe nella cartella specificata dalla variabile DOCUMENTROOT . E devono esplicitare la variabile html come global. Ecco come:
page.py
global html html=''' <!DOCTYPE html ><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Python like PHP pagina due</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> <h1>Python like PHP - Pagina </h1> <p>Page </p> </body> </html> '''
form.py
global html if request.forms.get('txt') is not None: ret=request.forms.get('txt') else: ret='' html=''' <!DOCTYPE html ><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Python like PHP pagina due</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> <h1>Form {ret}</h1> <form action="/form.py" method="POST"> <input type="text" name="txt" placeholder="Insert value"/> <button type="submit">Send</button> </form> </body> </html> ''' html=html.format(ret=ret)
Per fare questo ci avvaliamo di uno script python (.py) messo sempre nella cartella htdocs (preferenza del nostro script). Dichiariamo la variabile app come global sia su main.py che sul nostro script per aggiornare le rotte.
refresh-routes.py
global app def fabio(): return("<h1>Fabio ciao</h1>") def fml(): return("<h1>FML ciao</h1>") app.route("/fabio", ['GET', 'POST'], fabio) app.route("/fml", ['GET', 'POST'], fml)
Le rotte verranno impostate su questo script. Per renderle operative basta richiamare lo script stesso dal browser . Verranno sovrascitte tutte le rotte precedenti e aggiunte quelle nuove. Una volta richiamato lo script (per esempio: http://localhost:8080/refresh-routes.py) le rotte saranno disponibili per tutti gli utenti che si collegheranno al server.
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.