From f6f689504efe529895e9edcf8e03f0f0f6437894 Mon Sep 17 00:00:00 2001 From: Willy Date: Tue, 2 Jun 2026 11:46:07 +0200 Subject: [PATCH] Upload files to "/" --- app.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 app.py diff --git a/app.py b/app.py new file mode 100644 index 0000000..1f6164e --- /dev/null +++ b/app.py @@ -0,0 +1,80 @@ +import os +import sqlite3 +from datetime import datetime + +from flask import Flask, request, redirect, render_template, url_for + +# template_folder="." : index.html est à côté de ce script, à la racine. +app = Flask(__name__, template_folder=".") + +# Ce dossier correspond au point de montage déclaré côté Docker. +DATA_DIR = os.environ.get("DATA_DIR", "/data") +DB_PATH = os.path.join(DATA_DIR, "commentaires.db") + + +def get_db(): + """Ouvre une connexion à la base, en créant le dossier de données au besoin.""" + os.makedirs(DATA_DIR, exist_ok=True) + conn = sqlite3.connect(DB_PATH) + conn.row_factory = sqlite3.Row + return conn + + +def init_db(): + """Crée la table si elle n'existe pas encore (idempotent).""" + with get_db() as conn: + conn.execute( + """ + CREATE TABLE IF NOT EXISTS commentaires ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + auteur TEXT NOT NULL, + message TEXT NOT NULL, + date_creation TEXT NOT NULL + ) + """ + ) + + +@app.route("/") +def index(): + with get_db() as conn: + commentaires = conn.execute( + "SELECT auteur, message, date_creation " + "FROM commentaires ORDER BY id DESC" + ).fetchall() + return render_template("index.html", commentaires=commentaires) + + +@app.route("/poster", methods=["POST"]) +def poster(): + # Poster un commentaire. + auteur = (request.form.get("auteur") or "").strip() or "Un chaton anonyme" + message = (request.form.get("message") or "").strip() + + if message: + with get_db() as conn: + conn.execute( + "INSERT INTO commentaires (auteur, message, date_creation) " + "VALUES (?, ?, ?)", + ( + auteur[:60], + message[:2000], + datetime.now().strftime("%d/%m/%Y à %H:%M"), + ), + ) + return redirect(url_for("index")) + + +@app.route("/reset", methods=["POST"]) +def reset(): + # Supprime tout les commentaires. + with get_db() as conn: + conn.execute("DELETE FROM commentaires") + return redirect(url_for("index")) + + +init_db() + +if __name__ == "__main__": + # Serveur de test intégré, uniquement à usage démonstratif. + app.run(host="0.0.0.0", port=5000)