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.
pip install CherryPy
Créez un dossier pour votre projet, par exemple my_cherrypy_app
. À l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript (si nécessaire).templates
: pour vos fichiers 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>
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())
Pour démarrer votre application, exécutez le fichier Python principal :
python app.py
Ouvrez votre navigateur et accédez à http://localhost:8080
. Vous devriez voir votre application web. Entrez votre nom dans le formulaire et soumettez-le.
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.
Voici l'arborescence recommandée :
mon_projet/ ├── app.py ├── static/ │ └── style.css ├── templates/ │ ├── index.html │ ├── register.html │ └── login.html └── 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()
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"} })
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>
<!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>
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; }
Pour lancer l'application :
pip install cherrypy jinja2 python app.py
Note : Pour une application réelle, ajoutez le hashage des mots de passe (bcrypt) et la gestion des sessions.
Cette documentation présente les principales classes et méthodes du framework CherryPy, ainsi que leur signification et leur utilisation.
Pour installer CherryPy, utilisez la commande suivante :
pip install CherryPy
1️⃣ Description : Classe principale pour les applications CherryPy.
2️⃣ Utilisation : Créer une instance de l'application.
app = cherrypy.Application(root)
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"
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)
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')
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'
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")
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}})
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())
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.
Abonnez-vous maintenant et recevez notre newsletter hebdomadaire avec des matériaux éducatifs, de nouveaux cours, des articles intéressants, des livres populaires et bien plus encore !