En combinar Python amb el framework Flask, aconseguim una plataforma web dinàmica. Això ens ofereix els següents avantatges:
- Emmagatzematge de dades: Ens permet registrar paràmetres importants (com credencials d’accés o les puntuacions de la pràctica) en un sistema de bases de dades (MySQL/SQLite).
- Control de sessions: El lloc web és capaç de recordar quins usuaris estan connectats mentre es mouen per les diferents seccions.
- Estructura escalable: Permet integrar noves idees i característiques en el futur de forma senzilla, sense haver de reescriure tot el projecte de zero.
Disseny del codi font
Per tal de tenir una aplicació organitzada, estructurada i lliure de fallades, vam dividir el codi en diferents fitxers (disseny modular). També ens vam assegurar de respectar la guia d’estil PEP 8, aconseguint així un codi molt net, ordenat i fàcil d’entendre per a qualsevol persona.
Codi inicial amb fallada de dependències (App.py)
Aquesta era la primera versió del nostre fitxer, la qual utilitzava connectors externs que necessitaven instal·lació prèvia:
# App.py - Codi inicial amb error a l'entorn escolar
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy # <--- Provoca ModuleNotFoundError
app = Flask(__name__)
# Configuració que requeria instal·lació externa
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://usuari:contrasenya@localhost/dades'
db = SQLAlchemy(app)
@app.route('/')
def home():
return "Servidor actiu"
if __name__ == '__main__':
app.run(debug=True)
El contratemps: Bloqueig de components
Quan vam voler provar el projecte, els ordinadors del centre educatiu ens van impedir descarregar la llibreria flask-sqlalchemy a causa dels permisos de seguretat del sistema. Això feia que el programa s’aturés i mostrés el missatge d’error: ModuleNotFoundError: No module named 'flask_sqlalchemy'.
La variant adoptada: Migració a SQLite3 i entorn natiu
La millor alternativa per saltar-nos aquest bloqueig va ser utilitzar SQLite3 i les eines internes de Python. Com que aquests mòduls ja venen preinstal·lats de fàbrica amb el llenguatge, no cal descarregar res d’Internet. Això fa que la nostra aplicació es pugui executar immediatament en qualsevol ordinador de l’escola sense cap mena de preparació prèvia.
Interacció amb la intel·ligència artificial
Davant del problema amb els permisos del portàtil, vam utilitzar el següent prompt per trobar una drecera tècnica ràpida:
“Tinc un error al portàtil de l’escola perquè no puc instal·lar Flask. Pots donar-me un codi en Python que utilitzi només llibreries natives per crear un servidor web que guardi dades en un fitxer .txt i que tingui un disseny de color verd neó?”
Codi final sense dependències (Solució alternativa)
Aquest és el script alternatiu generat per la IA, dissenyat específicament per funcionar sense instal·lació de llibreries:
# servidor_portable.py - Solució nativa sense instal·lacions
from http.server import SimpleHTTPRequestHandler, HTTPServer
import cgi
class ServidorVerdNeon(SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
# Disseny verd neó demanat al prompt
html = """
<html>
<head>
<style>
body { background-color: #000; color: #39FF14; font-family: monospace; padding: 50px; }
input { background: #111; color: #39FF14; border: 1px solid #39FF14; padding: 5px; }
button { background: #39FF14; color: #000; border: none; padding: 5px 10px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<h1>Servidor Web Escolar (Natiu)</h1>
<form method="POST" action="/guardar">
<label>Introdueix les teves dades:</label><br><br>
<input type="text" name="dades_usuari" required>
<button type="submit">Enviar</button>
</form>
</body>
</html>
"""
self.wfile.write(html.encode('utf-8'))
else:
super().do_GET()
def do_POST(self):
if self.path == '/guardar':
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST'}
)
text_rebut = form.getvalue('dades_usuari')
# Guardem les dades en un fitxer de text local
with open("dades.txt", "a", encoding="utf-8") as f:
f.write(text_rebut + "\n")
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
self.wfile.write("<body style='background:#000;color:#39FF14;font-family:monospace;'><h2>Dades guardades amb èxit en dades.txt!</h2><a href='/' style='color:#fff;'>Tornar</a></body>".encode('utf-8'))
# Arrenquem el servidor al port 8080
port = 8080
server = HTTPServer(('localhost', port), ServidorVerdNeon)
print(f"Servidor funcionant a http://localhost:{port}")
server.serve_forever()
Exemple de promp:
Tinc un problema amb el portàtil de l’escola: està bloquejat i no em deixa instal·lar el Flask ni cap llibreria des de la terminal. Em pots passar un codi de Python que funcioni només amb el que ve de sèrie de fàbrica? La idea és crear una pàgina web senzilla que tingui un formulari on la gent pugui escriure, i que tot el que posin es guardi automàticament en un fitxer de text dades.txt. Per al disseny, m’agradaria que fos amb el fons negre i les lletres en verd neó, com si fos la pantalla d’un ordinador de hacker.
