from bottle import route, run, template, static_file, get, request, response from os.path import dirname, join from sessions import get_or_create_session, save_session # Page d'accueil @route('/') def index(): return template('index.html') # Bonjour personnalisé @route('/hello/') def hello_user(name): return template('hello_user.html', name=name) # Calcul @route('/calcul///') def calcul(op, a, b): match op: case 'add': return f"resultat = {a + b}" case 'sub': return f"resultat = {a - b}" case 'mul': return f"resultat = {a * b}" case 'div': return f"resultat = {a / b}" case _: return "opérateur inconnu" # Table de multiplication @route('/tabmul/') def tabmul(nb): return template('tabmul.html', nb=nb) # Fichiers statiques @route('/static/') def server_static(filename): return static_file(filename, root=join(dirname(__file__), "static")) # Calculatrice @get('/calculatrice') def calculatrice(): a = request.query.get('a', default=None) b = request.query.get('b', default=None) op = request.query.get('op', default=None) if a is None and b is None and op is None: # Aucune valeur saisie, on affiche le formulaire vide return template("calculatrice.html") try: a = float(a) b = float(b) except ValueError: # Erreur de conversion, on affiche le formulaire avec un message d'erreur return template("calculatrice.html", erreur="Les valeurs saisies ne sont pas des nombres.", a=a, b=b, op=op) match op: case "add": resultat = a + b case "sub": resultat = a - b case "mul": resultat = a * b case "div": if b == 0: return template("calculatrice.html", erreur="Division par zéro.", a=a, b=b, op=op) resultat = a / b case _: return template("calculatrice.html", erreur="Opération inconnue.", a=a, b=b, op=op) # Affichage du résultat return template("calculatrice.html", a=a, b=b, op=op, resultat=resultat) # Choix d'options pour une voiture OPTIONS = { "pmetal": { "titre": "Peinture métallisée", "prix": 500 }, "gps": { "titre": "GPS", "prix": 1000 }, "sieges": { "titre": "Sièges cuir", "prix": 1500 }, "toit": { "titre": "Toit ouvrant panoramique", "prix": 2000 }, "jantes": { "titre": "Jantes alliage", "prix": 400 } } @route('/mavoiture', method=['GET', 'POST']) def mavoiture(): if request.method == 'POST': # Récupération des options options = request.POST.getall('options') prix = 18000 for option in options: prix += OPTIONS[option]['prix'] return template("mavoiture.html", options=OPTIONS, selected=options, prix=prix) else: return template("mavoiture.html", options=OPTIONS, selected=[], prix=18000) # Compteur de visites @route('/compteur') def compteur(): # on récupère le cookie "compteur" (s'il existe) compteur = request.get_cookie("compteur") if compteur is None: # si le cookie n'existe pas, on l'initialise à 1 compteur = 1 else: # sinon, on l'incrémente de 1 compteur = int(compteur) + 1 # on crée ou met à jour le cookie "compteur" response.set_cookie("compteur", str(compteur), path="/compteur", httponly=True, max_age=None, expires=None) return f"Vous avez visité cette page {compteur} fois." # Enregistrement de messages dans une session @route('/messages', method=['GET', 'POST']) def messages(): # on récupère la session session_id, session, created = get_or_create_session() if request.method=="POST": # on récupère le message du formulaire message = request.forms.get('message') if message: # on ajoute le message à la session if "messages" not in session: session["messages"] = [] session["messages"].append(message) # on enregistre la session save_session(session_id, session) # on affiche les messages return template("messages.html", messages=session.get("messages", [])) if __name__ == '__main__': run(host='localhost', port=38083, debug=True, reloader=True)