1. Per què fem servir Python?
Fem servir Python perquè l’HTML sol és “estàtic” (no canvia). Amb Python i el framework Flask, podem fer que la web sigui “dinàmica”. Això vol dir que la web pot:
- Guardar informació: Com noms d’usuaris o punts d’un joc en una base de dades (MySQL).
- Recordar l’usuari: Mitjançant les “sessions”, la web sap qui ets mentre navegues.
- Créixer: És fàcil afegir noves funcions sense haver de tornar a començar de zero.
2- Com hem organitzat el codi:
El nostre codi està separat en peces (modular) perquè sigui fàcil de llegir i no tingui errors. Seguim les regles PEP8 (codi net).
Exemple de codi simple (App.py): “Codi inicial amb error”
from flask import Flask, render_template, request, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = "clau_per_a_seguretat"
# Connectem Python amb la base de dades MySQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://usuari:password@localhost/la_meva_db'
db = SQLAlchemy(app)
# Creem una taula per guardar participants
class Participant(db.Model):
id = db.Column(db.Integer, primary_key=True)
nom = db.Column(db.String(50))
El Repte: Error de Llibreria:
Inicialment, funcionava perquè el portàtil de l’escola no permetia instal·lar flask-sqlalchemy. L’error era: ModuleNotFoundError.
La Solució: Ús de SQLite3:
Vaig decidir canviar a la llibreria SQLite3. Aquesta llibreria està integrada dins de Python i no requereix instal·lació externa. Això fa que l’aplicació sigui portable i funcioni en qualsevol entorn escolar

Aquesta es el codi:(Codi final optimitzat)
from flask import Flask, render_template, request, redirect
import sqlite3 # This is built-in! No download needed.
app = Flask(__name__)
# 1. Setup the database (This happens inside the computer memory or a local file)
def init_db():
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Create a simple table for participants
cursor.execute('CREATE TABLE IF NOT EXISTS participants (id INTEGER PRIMARY KEY, name TEXT)')
conn.commit()
conn.close()
# Run the setup
init_db()
@app.route('/')
def index():
# Connect and get the names
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM participants')
data = cursor.fetchall()
conn.close()
return render_template('index.html', participants=data)
@app.route('/add', methods=['POST'])
def add_name():
user_name = request.form.get('name')
if user_name:
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO participants (name) VALUES (?)', (user_name,))
conn.commit()
conn.close()
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
