Barra laterale

programmazione:python:bottle:programmare_come_in_php

Usare il framework Bottle per avere un'esperienza simile al PHP

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>
'''

Lavorare con i form

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)

E se volessimo creare delle rotte statiche senza spegnere il server?

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.


programmazione/python/bottle/programmare_come_in_php.txt · Ultima modifica: 26/10/2022 - 12:30 da Fabio Di Matteo