Exploration de quelques exemples d'applications sur CherryPy
Dans cette section, nous allons explorer quelques exemples d'applications que vous pouvez développer en utilisant le framework CherryPy. Ces exemples vous aideront à comprendre les possibilités offertes par CherryPy et à vous inspirer pour vos propres projets.
Une application de blog simple permet aux utilisateurs de créer, lire, mettre à jour et supprimer des articles. Vous pouvez utiliser une base de données pour stocker les articles et les commentaires.
Cette application permet aux utilisateurs de suivre leurs tâches quotidiennes. Les utilisateurs peuvent ajouter, supprimer et marquer les tâches comme complètes.
Créez un site de portfolio personnel où les utilisateurs peuvent afficher leurs projets, compétences et expériences professionnelles.
Développez une application de e-commerce où les utilisateurs peuvent parcourir, ajouter au panier et acheter des produits.
Cette application permet aux utilisateurs de discuter en temps réel à travers des salons de chat. Utilisez WebSockets pour la communication en temps réel.
Ces exemples d'applications montrent la flexibilité et les capacités de CherryPy. Que vous souhaitiez créer une application simple ou complexe, CherryPy peut vous aider à réaliser vos idées. N'hésitez pas à explorer ces projets et à les adapter à vos besoins !
Dans cette activité, vous allez créer une application de blog simple en utilisant le framework CherryPy. Cette application permettra aux utilisateurs de créer, lire, mettre à jour et supprimer des articles de blog.
pip install CherryPy
Créez un dossier pour votre projet, par exemple blog_app
, et à l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript.templates
: pour vos fichiers HTML.Créez un fichier nommé database.py
pour initialiser votre base de données SQLite :
import sqlite3
def init_db():
conn = sqlite3.connect('blog.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
content TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)''')
conn.commit()
conn.close()
if __name__ == '__main__':
init_db()
Ce code crée une table posts
pour stocker les articles de blog.
Dans le dossier templates
, créez les fichiers suivants :
index.html
: pour afficher la liste des articles.create.html
: pour créer un nouvel article.edit.html
: pour éditer un article existant.Voici le contenu de index.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Blog</title>
</head>
<body>
<h1>Articles de Blog</h1>
<a href="/create">Créer un nouvel article</a>
<ul>
{% for post in posts %}
<li><a href="/edit/{{ post.id }}">{{ post.title }}</a> - <a href="/delete/{{ post.id }}">Supprimer</a></li>
{% endfor %}
</ul>
</body>
</html>
Voici le contenu de create.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Créer un article</title>
</head>
<body>
<h1>Nouvel Article</h1>
<form action="/create" method="post">
<label for="title">Titre:</label>
<input type="text" id="title" name="title" required>
<label for="content">Contenu:</label>
<textarea id="content" name="content" required></textarea>
<input type="submit" value="Créer">
</form>
</body>
</html>
Voici le contenu de edit.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Modifier l'article</title>
</head>
<body>
<h1>Modifier l'article</h1>
<form action="/edit/{{ post.id }}" method="post">
<label for="title">Titre:</label>
<input type="text" id="title" name="title" value="{{ post.title }}" required>
<label for="content">Contenu:</label>
<textarea id="content" name="content" required>{{ post.content }}</textarea>
<input type="submit" value="Modifier">
</form>
</body>
</html>
Dans le dossier principal, créez un fichier nommé app.py
et ajoutez le code suivant :
import cherrypy
import sqlite3
from jinja2 import Environment, FileSystemLoader
class Blog:
def __init__(self):
self.env = Environment(loader=FileSystemLoader('templates'))
@cherrypy.expose
def index(self):
conn = sqlite3.connect('blog.db')
c = conn.cursor()
c.execute('SELECT * FROM posts')
posts = c.fetchall()
conn.close()
template = self.env.get_template('index.html')
return template.render(posts=posts)
@cherrypy.expose
def create(self, title=None, content=None):
if title and content:
conn = sqlite3.connect('blog.db')
c = conn.cursor()
c.execute('INSERT INTO posts (title, content) VALUES (?, ?)', (title, content))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
template = self.env.get_template('create.html')
return template.render()
@cherrypy.expose
def edit(self, id=None, title=None, content=None):
conn = sqlite3.connect('blog.db')
c = conn.cursor()
if title and content:
c.execute('UPDATE posts SET title=?, content=? WHERE id=?', (title, content, id))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
c.execute('SELECT * FROM posts WHERE id=?', (id,))
post = c.fetchone()
conn.close()
template = self.env.get_template('edit.html')
return template.render(post=post)
@cherrypy.expose
def delete(self, id):
conn = sqlite3.connect('blog.db')
c = conn.cursor()
c.execute('DELETE FROM posts WHERE id=?', (id,))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
if __name__ == '__main__':
cherrypy.quickstart(Blog())
Avant de démarrer votre application, exécutez database.py
pour créer la base de données et la table :
python database.py
Pour démarrer votre application, exécutez le fichier Python principal :
python app.py
Vous avez maintenant créé une application de blog simple avec CherryPy. Vous pouvez créer, lire, modifier et supprimer des articles de blog. Explorez davantage en ajoutant des fonctionnalités comme des commentaires ou une authentification des utilisateurs !
Dans cette activité, vous allez créer une application de gestion de tâches qui permettra aux utilisateurs de suivre leurs tâches quotidiennes. Cette application inclura des fonctionnalités pour ajouter, supprimer et marquer les tâches comme complètes.
pip install CherryPy
Créez un dossier pour votre projet, par exemple task_manager
, et à l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript.templates
: pour vos fichiers HTML.Créez un fichier nommé database.py
pour initialiser votre base de données SQLite :
import sqlite3
def init_db():
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
completed BOOLEAN DEFAULT 0
)''')
conn.commit()
conn.close()
if __name__ == '__main__':
init_db()
Ce code crée une table tasks
pour stocker les tâches.
Dans le dossier templates
, créez les fichiers suivants :
index.html
: pour afficher la liste des tâches.create.html
: pour créer une nouvelle tâche.Voici le contenu de index.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Gestion de Tâches</title>
</head>
<body>
<h1>Liste de Tâches</h1>
<a href="/create">Ajouter une Tâche</a>
<ul>
{% for task in tasks %}
<li>{{ task.title }} - <a href="/complete/{{ task.id }}">Compléter</a> - <a href="/delete/{{ task.id }}">Supprimer</a></li>
{% endfor %}
</ul>
</body>
</html>
Voici le contenu de create.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Créer une Tâche</title>
</head>
<body>
<h1>Nouvelle Tâche</h1>
<form action="/create" method="post">
<label for="title">Titre:</label>
<input type="text" id="title" name="title" required>
<input type="submit" value="Ajouter">
</form>
</body>
</html>
Dans le dossier principal, créez un fichier nommé app.py
et ajoutez le code suivant :
import cherrypy
import sqlite3
from jinja2 import Environment, FileSystemLoader
class TaskManager:
def __init__(self):
self.env = Environment(loader=FileSystemLoader('templates'))
@cherrypy.expose
def index(self):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('SELECT * FROM tasks')
tasks = c.fetchall()
conn.close()
template = self.env.get_template('index.html')
return template.render(tasks=tasks)
@cherrypy.expose
def create(self, title=None):
if title:
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('INSERT INTO tasks (title) VALUES (?)', (title,))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
template = self.env.get_template('create.html')
return template.render()
@cherrypy.expose
def complete(self, id):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('UPDATE tasks SET completed=1 WHERE id=?', (id,))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
@cherrypy.expose
def delete(self, id):
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('DELETE FROM tasks WHERE id=?', (id,))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
if __name__ == '__main__':
cherrypy.quickstart(TaskManager())
Avant de démarrer votre application, exécutez database.py
pour créer la base de données et la table :
python database.py
Pour démarrer votre application, exécutez le fichier Python principal :
python app.py
Vous avez maintenant créé une application de gestion de tâches simple avec CherryPy. Vous pouvez ajouter, supprimer et marquer des tâches comme complètes. Explorez davantage en ajoutant des fonctionnalités comme des dates d'échéance ou des catégories de tâches !
Dans cette activité, vous allez créer une application de portfolio personnel qui permettra aux utilisateurs de présenter leurs projets, compétences et expériences professionnelles. Cette application inclura des fonctionnalités pour ajouter, modifier et afficher des projets.
pip install CherryPy
Créez un dossier pour votre projet, par exemple portfolio_app
, et à l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript.templates
: pour vos fichiers HTML.Créez un fichier nommé database.py
pour initialiser votre base de données SQLite :
import sqlite3
def init_db():
conn = sqlite3.connect('portfolio.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
description TEXT,
url TEXT
)''')
conn.commit()
conn.close()
if __name__ == '__main__':
init_db()
Ce code crée une table projects
pour stocker les projets du portfolio.
Dans le dossier templates
, créez les fichiers suivants :
index.html
: pour afficher la liste des projets.create.html
: pour ajouter un nouveau projet.edit.html
: pour modifier un projet existant.Voici le contenu de index.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Portfolio</title>
</head>
<body>
<h1>Projets</h1>
<a href="/create">Ajouter un Projet</a>
<ul>
{% for project in projects %}
<li><a href="{{ project.url }}">{{ project.title }}</a> - <a href="/edit/{{ project.id }}">Modifier</a> - <a href="/delete/{{ project.id }}">Supprimer</a></li>
{% endfor %}
</ul>
</body>
</html>
Voici le contenu de create.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Ajouter un Projet</title>
</head>
<body>
<h1>Nouveau Projet</h1>
<form action="/create" method="post">
<label for="title">Titre:</label>
<input type="text" id="title" name="title" required>
<label for="description">Description:</label>
<textarea id="description" name="description" required></textarea>
<label for="url">URL:</label>
<input type="text" id="url" name="url" required>
<input type="submit" value="Ajouter">
</form>
</body>
</html>
Voici le contenu de edit.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Modifier le Projet</title>
</head>
<body>
<h1>Modifier le Projet</h1>
<form action="/edit/{{ project.id }}" method="post">
<label for="title">Titre:</label>
<input type="text" id="title" name="title" value="{{ project.title }}" required>
<label for="description">Description:</label>
<textarea id="description" name="description" required>{{ project.description }}</textarea>
<label for="url">URL:</label>
<input type="text" id="url" name="url" value="{{ project.url }}" required>
<input type="submit" value="Modifier">
</form>
</body>
</html>
Dans le dossier principal, créez un fichier nommé app.py
et ajoutez le code suivant :
import cherrypy
import sqlite3
from jinja2 import Environment, FileSystemLoader
class Portfolio:
def __init__(self):
self.env = Environment(loader=FileSystemLoader('templates'))
@cherrypy.expose
def index(self):
conn = sqlite3.connect('portfolio.db')
c = conn.cursor()
c.execute('SELECT * FROM projects')
projects = c.fetchall()
conn.close()
template = self.env.get_template('index.html')
return template.render(projects=projects)
@cherrypy.expose
def create(self, title=None, description=None, url=None):
if title and description and url:
conn = sqlite3.connect('portfolio.db')
c = conn.cursor()
c.execute('INSERT INTO projects (title, description, url) VALUES (?, ?, ?)', (title, description, url))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
template = self.env.get_template('create.html')
return template.render()
@cherrypy.expose
def edit(self, id=None, title=None, description=None, url=None):
conn = sqlite3.connect('portfolio.db')
c = conn.cursor()
if title and description and url:
c.execute('UPDATE projects SET title=?, description=?, url=? WHERE id=?', (title, description, url, id))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
c.execute('SELECT * FROM projects WHERE id=?', (id,))
project = c.fetchone()
conn.close()
template = self.env.get_template('edit.html')
return template.render(project=project)
@cherrypy.expose
def delete(self, id):
conn = sqlite3.connect('portfolio.db')
c = conn.cursor()
c.execute('DELETE FROM projects WHERE id=?', (id,))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
if __name__ == '__main__':
cherrypy.quickstart(Portfolio())
Avant de démarrer votre application, exécutez database.py
pour créer la base de données et la table :
python database.py
Pour démarrer votre application, exécutez le fichier Python principal :
python app.py
Vous avez maintenant créé une application de portfolio simple avec CherryPy. Vous pouvez ajouter, modifier et supprimer des projets. Explorez davantage en ajoutant des sections pour vos compétences, expériences, et même un formulaire de contact !
Dans cette activité, vous allez créer une application de e-commerce qui permettra aux utilisateurs de parcourir des produits, d'ajouter des articles à leur panier et de passer des commandes. Cette application inclura des fonctionnalités de gestion des produits et du panier.
pip install CherryPy
Créez un dossier pour votre projet, par exemple ecommerce_app
, et à l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript.templates
: pour vos fichiers HTML.Créez un fichier nommé database.py
pour initialiser votre base de données SQLite :
import sqlite3
def init_db():
conn = sqlite3.connect('ecommerce.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT,
price REAL
)''')
c.execute('''CREATE TABLE IF NOT EXISTS cart (
id INTEGER PRIMARY KEY AUTOINCREMENT,
product_id INTEGER,
quantity INTEGER,
FOREIGN KEY (product_id) REFERENCES products (id)
)''')
conn.commit()
conn.close()
if __name__ == '__main__':
init_db()
Ce code crée des tables products
pour stocker les produits et cart
pour gérer le panier.
Dans le dossier templates
, créez les fichiers suivants :
index.html
: pour afficher la liste des produits.cart.html
: pour afficher le contenu du panier.Voici le contenu de index.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>E-commerce</title>
</head>
<body>
<h1>Produits</h1>
<ul>
{% for product in products %}
<li>{{ product.name }} - {{ product.price }} € - <a href="/add_to_cart/{{ product.id }}">Ajouter au Panier</a></li>
{% endfor %}
</ul>
<a href="/cart">Voir le Panier</a>
</body>
</html>
Voici le contenu de cart.html
:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Panier</title>
</head>
<body>
<h1>Contenu du Panier</h1>
<ul>
{% for item in cart %}
<li>Produit ID: {{ item.product_id }} - Quantité: {{ item.quantity }}</li>
{% endfor %}
</ul>
<a href="/">Retour à la Boutique</a>
</body>
</html>
Dans le dossier principal, créez un fichier nommé app.py
et ajoutez le code suivant :
import cherrypy
import sqlite3
from jinja2 import Environment, FileSystemLoader
class ECommerce:
def __init__(self):
self.env = Environment(loader=FileSystemLoader('templates'))
@cherrypy.expose
def index(self):
conn = sqlite3.connect('ecommerce.db')
c = conn.cursor()
c.execute('SELECT * FROM products')
products = c.fetchall()
conn.close()
template = self.env.get_template('index.html')
return template.render(products=products)
@cherrypy.expose
def add_to_cart(self, product_id):
conn = sqlite3.connect('ecommerce.db')
c = conn.cursor()
c.execute('INSERT INTO cart (product_id, quantity) VALUES (?, ?)', (product_id, 1))
conn.commit()
conn.close()
raise cherrypy.HTTPRedirect('/')
@cherrypy.expose
def cart(self):
conn = sqlite3.connect('ecommerce.db')
c = conn.cursor()
c.execute('SELECT * FROM cart')
cart = c.fetchall()
conn.close()
template = self.env.get_template('cart.html')
return template.render(cart=cart)
if __name__ == '__main__':
cherrypy.quickstart(ECommerce())
Avant de démarrer votre application, exécutez database.py
pour créer la base de données et les tables :
python database.py
Pour démarrer votre application, exécutez le fichier Python principal :
python app.py
Vous avez maintenant créé une application de e-commerce simple avec CherryPy. Vous pouvez parcourir les produits, ajouter des articles au panier et consulter le contenu du panier. Explorez davantage en ajoutant des fonctionnalités comme le traitement des paiements et la gestion des utilisateurs !
Dans cette activité, vous allez créer une application de chat en temps réel qui permettra aux utilisateurs d'échanger des messages dans des salons de discussion. Nous utiliserons CherryPy pour le serveur web et WebSockets pour la communication en temps réel.
pip install CherryPy websockets
Créez un dossier pour votre projet, par exemple chat_app
, et à l'intérieur, créez les sous-dossiers suivants :
static
: pour vos fichiers CSS et JavaScript.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>Chat en Temps Réel</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var ws = new WebSocket('ws://localhost:8080/chat');
ws.onmessage = function(event) {
$('#messages').append('<p>' + event.data + '</p>');
};
function sendMessage() {
var message = $('#message').val();
ws.send(message);
$('#message').val('');
}
</script>
</head>
<body>
<h1>Salon de Chat</h1>
<div id="messages"></div>
<input type="text" id="message" placeholder="Votre message...">
<button onclick="sendMessage()">Envoyer</button>
</body>
</html>
Dans le dossier principal, créez un fichier nommé app.py
et ajoutez le code suivant :
import cherrypy
from cherrypy import wsgiserver
import websockets
import asyncio
import threading
clients = set()
async def chat_server(websocket, path):
clients.add(websocket)
try:
async for message in websocket:
for client in clients:
if client != websocket:
await client.send(message)
finally:
clients.remove(websocket)
class ChatApp:
@cherrypy.expose
def index(self):
with open('templates/index.html') as f:
return f.read()
def run_websocket_server():
start_server = websockets.serve(chat_server, 'localhost', 8080)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
if __name__ == '__main__':
threading.Thread(target=run_websocket_server).start()
cherrypy.quickstart(ChatApp(), '/')
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 de chat. Ouvrez plusieurs onglets ou fenêtres pour tester le chat en temps réel.
Vous avez maintenant créé une application de chat en temps réel avec CherryPy et WebSockets. Les utilisateurs peuvent échanger des messages instantanément dans le salon de discussion. Explorez davantage en ajoutant des fonctionnalités comme des salons privés, des notifications ou des emojis !
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 !