madamasterclass.com

📔 Activité

Développez une application web avec CherryPy


Dans cette activité, vous allez créer une application web simple utilisant le framework CherryPy. Cette application affichera une page d'accueil et permettra aux utilisateurs d'interagir avec un formulaire.

1. Prérequis
  •                 1️⃣ Python installé sur votre machine.
  •                 2️⃣ CherryPy installé. Si ce n'est pas fait, exécutez la commande suivante :
  • pip install CherryPy
2. Créer la structure du projet

Créez un dossier pour votre projet, par exemple my_cherrypy_app. À l'intérieur, créez les sous-dossiers suivants :

  •                 1️⃣ static : pour vos fichiers CSS et JavaScript (si nécessaire).
  •                 2️⃣ templates : pour vos fichiers HTML.

3. Créer le fichier HTML

Dans le dossier templates, créez un fichier nommé index.html avec le contenu suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Application Web</title>
</head>
<body>
<h1>Bienvenue sur mon application web</h1>
<form action="/submit" method="post">
<label for="name">Votre nom:</label>
<input type="text" id="name" name="name" required>
<input type="submit" value="Soumettre">
</form>
</body>
</html>
4. Créer le fichier Python principal

Dans le dossier principal, créez un fichier nommé app.py et ajoutez le code suivant :

import cherrypy

class MyWebApp:
@cherrypy.expose
def index(self):
with open('templates/index.html') as f:
return f.read()

@cherrypy.expose
@cherrypy.tools.json_out()
def submit(self, name):
return {"message": f"Bonjour, {name}!"}

if __name__ == '__main__':
cherrypy.quickstart(MyWebApp())
5. Démarrer le serveur

Pour démarrer votre application, exécutez le fichier Python principal :

python app.py
6. Accéder à l'application

Ouvrez votre navigateur et accédez à http://localhost:8080. Vous devriez voir votre application web. Entrez votre nom dans le formulaire et soumettez-le.

7. Conclusion

Vous avez maintenant créé une application web simple avec CherryPy. Vous pouvez étendre cette application en ajoutant plus de pages, des fonctionnalités de style, et même une base de données pour stocker des informations.


Dans ce tutoriel, nous allons créer un système d'authentification (inscription/connexion) avec CherryPy, en utilisant une structure de dossiers organisée, des templates HTML et une base de données SQLite.

1. Structure du projet

Voici l'arborescence recommandée :

📁
mon_projet/
├── app.py
├── static/
│   └── style.css
├── templates/
│   ├── index.html
│   ├── register.html
│   └── login.html
└── users.db
2. Présentation de la base de données (users.db)

La base de données users.db est utilisée pour stocker les informations des utilisateurs, telles que les noms d'utilisateur et les mots de passe. Voici comment créer la table nécessaire :

🗄️
import sqlite3

def create_db():
    conn = sqlite3.connect("users.db")
    conn.execute('''CREATE TABLE IF NOT EXISTS users (
                        username TEXT PRIMARY KEY,
                        password TEXT NOT NULL
                    )''')
    conn.close()

if __name__ == "__main__":
    create_db()
3. Fichier principal (app.py)

Le contrôleur principal avec la logique d'authentification :

⌨️
import cherrypy
import sqlite3
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader("templates"))

class AuthApp:
    @cherrypy.expose
    def index(self):
        return env.get_template("index.html").render()

    @cherrypy.expose
    def register(self):
        return env.get_template("register.html").render()

    @cherrypy.expose
    def do_register(self, username=None, password=None):
        if username and password:
            conn = sqlite3.connect("users.db")
            try:
                conn.execute("INSERT INTO users VALUES (?, ?)", (username, password))
                return "Inscription réussie !"
            except sqlite3.IntegrityError:
                return "Erreur : Nom d'utilisateur existant"
            finally:
                conn.close()

if __name__ == "__main__":
    cherrypy.quickstart(AuthApp(), "/", {
        "/static": {"tools.staticdir.on": True, "tools.staticdir.dir": "static"}
    })
4. Template d'inscription (register.html)

Formulaire HTML avec gestion des données :

📝
<!DOCTYPE html>
<html>
<head>
    <title>Inscription</title>
    <link rel="stylesheet" href="/static/style.css">
</head>
<body>
    <h1>Créer un compte</h1>
    <form action="/do_register" method="post">
        <input type="text" name="username" placeholder="Nom d'utilisateur" required>
        <input type="password" name="password" placeholder="Mot de passe" required>
        <button type="submit">S'inscrire</button>
    </form>
    <p>Déjà inscrit ? <a href="/login">Se connecter</a></p>
</body>
</html>
5. Template de connexion (login.html)
📝
<!DOCTYPE html>
<html>
<head>
    <title>Connexion</title>
    <link rel="stylesheet" href="/static/style.css">
</head>
<body>
    <h1>Connexion</h1>
    <form action="/do_login" method="post">
        <input type="text" name="username" placeholder="Nom d'utilisateur" required>
        <input type="password" name="password" placeholder="Mot de passe" required>
        <button type="submit">Se connecter</button>
    </form>
    <p>Pas de compte ? <a href="/register">S'inscrire</a></p>
</body>
</html>
6. CSS (style.css)
🎨
body {
    font-family: Arial, sans-serif;
    max-width: 600px;
    margin: 0 auto;
    padding: 20px;
}
form {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
input, button {
    padding: 10px;
    font-size: 16px;
}
7. Exécution

Pour lancer l'application :

🚀
pip install cherrypy jinja2
python app.py
8. Fonctionnalités implémentées
  •                 ✔️ Structure MVC avec templates séparés
  •                 ✔️ Gestion des formulaires (POST)
  •                 ✔️ Base de données SQLite intégrée
  •                 ✔️ Styles CSS de base

Note : Pour une application réelle, ajoutez le hashage des mots de passe (bcrypt) et la gestion des sessions.


Documentation de CherryPy

Cette documentation présente les principales classes et méthodes du framework CherryPy, ainsi que leur signification et leur utilisation.

1. Installation

Pour installer CherryPy, utilisez la commande suivante :

pip install CherryPy
2. Classes Principales
2.1. cherrypy.Application

                1️⃣ Description : Classe principale pour les applications CherryPy.

                2️⃣ Utilisation : Créer une instance de l'application.

app = cherrypy.Application(root)
2.2. cherrypy.expose

                1️⃣ Description : Décorateur pour exposer des méthodes comme des points de terminaison HTTP.

                2️⃣ Utilisation : Décorez une méthode pour qu'elle soit accessible via HTTP.

@cherrypy.expose
def index(self):
return "Hello World"
2.3. cherrypy.quickstart

                1️⃣ Description : Démarre un serveur CherryPy avec une configuration par défaut.

                2️⃣ Utilisation : Lancez l'application en passant l'instance de l'application.

cherrypy.quickstart(app)
3. Gestion des Requêtes
3.1. cherrypy.request

                1️⃣ Description : Objet représentant la requête HTTP actuelle.

                2️⃣ Utilisation : Accéder aux données de la requête, comme les paramètres ou les en-têtes.

param = cherrypy.request.params.get('param_name')
3.2. cherrypy.response

                1️⃣ Description : Objet représentant la réponse HTTP actuelle.

                2️⃣ Utilisation : Modifier le statut ou les en-têtes de la réponse.

cherrypy.response.status = '404 Not Found'
4. Gestion des Erreurs
cherrypy.HTTPError

                1️⃣ Description : Classe pour lever des erreurs HTTP spécifiques.

                2️⃣ Utilisation : Lever une erreur HTTP dans votre application.

raise cherrypy.HTTPError(404, "Page non trouvée")
5. Configuration
cherrypy.config

                1️⃣ Description : Module pour configurer les paramètres de l'application.

                2️⃣ Utilisation : Définir des options de configuration globales.

cherrypy.config.update({'global': {'server.socket_host': '0.0.0.0', 'server.socket_port': 8080}})
6. Exemple Complet

Voici un exemple complet d'application web utilisant CherryPy :

import cherrypy

class HelloWorld:
@cherrypy.expose
def index(self):
return "Bonjour, Monde!"

if __name__ == '__main__':
cherrypy.quickstart(HelloWorld())
7. Conclusion

CherryPy est un puissant framework web qui simplifie le développement d'applications web en Python. Cette documentation couvre les bases pour vous aider à démarrer.

Forum(s) associé(s)

Page: