Prompt per Generar
Aplicació en Python
Institut Castellbisbal · CFGM Sistemes Microinformàtics i Xarxes · Curs 2025–2026
Araceli Saldaña Martínez
Per què Python i Flask?
Fem servir Python perquè l’HTML sol és estàtic (no canvia en funció de les dades). Amb Python i el framework Flask, podem convertir una web en una aplicació dinàmica capaç de processar, emmagatzemar i presentar informació en temps real.
- Noms d’usuaris o punts en una base de dades
- Dades persistents entre sessions
- Fitxers locals
.dbamb SQLite3
- Sessions Flask per identificar l’usuari actiu
- Clau secreta per a la signatura de cookies
- Control d’accés per rols
- Codi separat en mòduls independents
- Fàcil d’ampliar sense refer-ho tot
- Compliment estricte de l’estàndard PEP 8
Context del problema tècnic
Durant el desenvolupament del projecte es va detectar que els ordinadors de l’escola tenien restriccions d’administrador que impedien instal·lar paquets externs amb pip. Això va obligar a redissenyar l’arquitectura per eliminar totes les dependències de tercers i passar a una solució basada únicament en la biblioteca estàndard de Python.
from flask import Flask, render_template, request, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = "clau_per_a_seguretat"
# Connexió Python → Base de dades MySQL externa
app.config['SQLALCHEMY_DATABASE_URI'] = (
'mysql+pymysql://usuari:contrasenya@localhost/la_meva_db'
)
db = SQLAlchemy(app)
# Model de la taula de participants
class Participant(db.Model):
id = db.Column(db.Integer, primary_key=True)
nom = db.Column(db.String(50))
⚠️ Per què fallava aquest codi?
Els ordinadors de l’escola no permetien instal·lar flask-sqlalchemy ni el connector pymysql. En intentar importar-los, Python llançava un ModuleNotFoundError i l’aplicació no s’iniciava.
- Dependència externa:
flask-sqlalchemyrequereix instal·lació viapip. - Connector de base de dades:
pymysqlnecessita un servidor MySQL en execució. - Entorn restringit: Sense permisos d’administrador, cap instal·lació externa és possible.
from flask import Flask, render_template, request, redirect
import sqlite3 # Mòdul integrat a Python — no cal instal·lar res!
app = Flask(__name__)
# 1. Inicialització automàtica de la base de dades local
def init_db():
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute(
'CREATE TABLE IF NOT EXISTS participants '
'(id INTEGER PRIMARY KEY, name TEXT)'
)
conn.commit()
conn.close()
init_db() # S'executa en arrencar l'aplicació
# 2. Ruta principal: llegeix i mostra tots els participants
@app.route('/')
def index():
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)
# 3. Ruta d'inserció: rep el formulari i insereix de manera segura
@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()
# Ús de paràmetres (?) per prevenir injecció SQL
cursor.execute(
'INSERT INTO participants (name) VALUES (?)',
(user_name,)
)
conn.commit()
conn.close()
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
Per què SQLite3 és la solució correcta en aquest entorn?
sqlite3 és un mòdul integrat a Python des de la versió 2.5. No requereix cap instal·lació externa ni servidor de base de dades. Emmagatzema totes les dades en un únic fitxer local .db, la qual cosa fa l’aplicació completament portable i funcional en qualsevol ordinador de l’escola.
📊 Comparativa tècnica entre les dues arquitectures
| Criteri | MySQL + SQLAlchemy | SQLite3 natiu |
|---|---|---|
| Instal·lació externa | Sí (pip, pymysql) | No — inclòs a Python |
| Servidor de BD necessari | Sí (MySQL Server) | No — fitxer local |
| Portabilitat en entorns restringits | Baixa | Total |
| Complexitat d’instal·lació | Alta | Cap |
| Adequació per a projectes escolars | Baixa | Molt alta |
| Prevenció d’injecció SQL | Via ORM (SQLAlchemy) | Via paràmetres (?) |
Què és l’enginyeria de prompts?
L’enginyeria de prompts és la disciplina de redactar instruccions precises per a models d’intel·ligència artificial amb l’objectiu d’obtenir resultats de màxima qualitat. Un bon prompt especifica el rol de la IA, el context, els requisits tècnics i el format de sortida esperat. A continuació es presenten quatre prompts dissenyats per a aquest projecte, del més bàsic al més professional.
Requisits estrictes:
1. Framework i persistència: Utilitza Flask per al servidor web, però gestiona la base de dades mitjançant el mòdul natiu
sqlite3 de Python per garantir zero dependències de tercers.2. Estructura del codi: El codi ha de ser modular i net, seguint la guia d’estil PEP 8. Ha d’incloure una funció d’inicialització automatitzada (
init_db) per crear la taula de ‘participants’ (id, name) si el fitxer .db local no existeix.3. Rutes: Configura una ruta arrel
/ que llegeixi els registres i una ruta /add que rebi peticions POST per inserir nous participants de manera segura (prevenint injecció SQL).4. Interfície: Proporciona tant el codi Python com la plantilla HTML bàsica associada.»
render_template) per a una aplicació de registre escolar.Especificacions estètiques:
— Estil visual: Estètica fosca d’estil tecnològic, minimalista.
— Paleta de colors: Fons completament fosc, accents i tipografia principal en verd neó (#00ff66), text secundari en blanc trencat.
— Disposició: Una graella neta on es mostri a un costat el formulari d’entrada per a nous participants i a l’altre la llista de dades recuperades.
— CSS natiu pur: Evita frameworks externs (Tailwind, Bootstrap). Genera el CSS dins d’una etiqueta
<style> en el mateix fitxer.»
Genera un informe tècnic d’arquitectura titulat ‘Justificació del Canvi Tecnològic i Portabilitat’. Detalla:
— Els avantatges del mòdul natiu per a la reducció de fricció en el desplegament.
— La facilitat de distribució gràcies a les bases de dades basades en fitxers locals.
— El compliment de tots els requisits funcionals sense pèrdua de consistència de dades ni de seguretat contra injeccions SQL.»
Resultats assolits
- Resolució de l’error tècnic: La migració de SQLAlchemy + MySQL a SQLite3 natiu ha permès executar l’aplicació en qualsevol entorn escolar sense necessitat de permisos d’administrador.
- Codi net i professional: El codi final segueix l’estàndard PEP 8 i incorpora prevenció d’injecció SQL mitjançant paràmetres preparats.
- Enginyeria de prompts aplicada: L’ús de prompts precisos i estructurats ha permès obtenir codi de qualitat professional directament des d’eines d’IA.
- Portabilitat total: L’aplicació s’executa sense instal·lació addicional en qualsevol ordinador amb Python 3 instal·lat.
- Documentació completa: El projecte inclou justificació tècnica de totes les decisions d’arquitectura, apta per a memòria de pràctiques de nivell PRO+.
- Python 3.x
- Flask (framework web)
- SQLite3 (mòdul natiu)
- HTML + CSS natiu
- 4 prompts dissenyats
- Del nivell bàsic al professional
- Rol + context + requisits
- Format de sortida especificat
- PEP 8 — estil de codi
- Zero dependències externes
- Prevenció d’injecció SQL
- Arquitectura modular
