| from flask import Flask, request, render_template_string |
| import pandas as pd |
| from datetime import datetime |
| import os |
| import urllib.parse |
|
|
| app = Flask(__name__) |
|
|
| CSV_FILE = "people.csv" |
|
|
| def load_data(): |
| if not os.path.exists(CSV_FILE): |
| df = pd.DataFrame(columns=['email', 'name', 'registered', 'phone', 'timestamp']) |
| df.to_csv(CSV_FILE, index=False) |
| return pd.read_csv(CSV_FILE) |
|
|
| def save_data(df): |
| df.to_csv(CSV_FILE, index=False) |
|
|
| def render_status_page(email): |
| df = load_data() |
|
|
| if email not in df['email'].values: |
| return f"L'email {email} n'est pas dans la liste." |
|
|
| idx = df.index[df['email'] == email][0] |
| if not df.at[idx, 'registered']: |
| df.at[idx, 'registered'] = True |
| df.at[idx, 'timestamp'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S") |
| save_data(df) |
| status = "✅ Enregistré avec succès !" |
| else: |
| status = "✅ Vous êtes déjà enregistré." |
|
|
| person = df.loc[idx] |
|
|
| html = """ |
| <!DOCTYPE html> |
| <html lang="fr"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| <title>Statut d'enregistrement</title> |
| <style> |
| body { |
| font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, |
| Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; |
| background-color: #f5f7fa; |
| color: #333; |
| margin: 0; padding: 0; |
| display: flex; |
| justify-content: center; |
| align-items: center; |
| height: 100vh; |
| } |
| .container { |
| background: white; |
| padding: 2rem 3rem; |
| border-radius: 8px; |
| box-shadow: 0 4px 12px rgba(0,0,0,0.1); |
| max-width: 400px; |
| width: 90%; |
| text-align: center; |
| } |
| h1 { |
| color: #2c3e50; |
| margin-bottom: 1rem; |
| } |
| p { |
| font-size: 1.1rem; |
| margin: 0.5rem 0; |
| } |
| strong { |
| color: #27ae60; |
| } |
| </style> |
| </head> |
| <body> |
| <div class="container"> |
| <h1>Bonjour {{ name }} !</h1> |
| <p>Status: <strong>{{ status }}</strong></p> |
| <p>Email: {{ email }}</p> |
| <p>Téléphone: {{ phone }}</p> |
| <p>Enregistré depuis: {{ timestamp }}</p> |
| </div> |
| </body> |
| </html> |
| """ |
|
|
| return render_template_string(html, |
| name=person['name'], |
| status=status, |
| email=person['email'], |
| phone=person['phone'], |
| timestamp=person['timestamp'] if 'timestamp' in person and pd.notna(person['timestamp']) else "N/A" |
| ) |
|
|
|
|
| @app.route("/") |
| def home(): |
| email = request.args.get("email") |
| if not email: |
| return "Paramètre email manquant dans l'URL. Exemple: /?email=alice@example.com" |
| email = urllib.parse.unquote(email) |
| return render_status_page(email) |
|
|
|
|
| @app.route("/person/<path:email>") |
| def person(email): |
| email = urllib.parse.unquote(email) |
| return render_status_page(email) |
|
|
|
|
| if __name__ == "__main__": |
| app.run(host="0.0.0.0", port=7860) |
|
|