Pizzeria
L’objectif de l’activité est de créer une petite base de données concernant des pizzas, du point de vue d’un gérant de pizzeria : recettes, prix, ventes, notation, …
Utiliser le logiciel DB Browser for SQLite, dans sa version portable (sans installation).
Schéma relationnel de la base de données
Pizzas (nom, prix_vente)
Ingredients (nom, nom_pizza, quantite)
Produits (nom, prix_kg, allergene)
Ventes (id, date, nom_pizza, note_consommateur)
Analyse du schéma
Création des tables
Établissement des requêtes
Une base de donnée déjà remplie, va permettre de préparer les requêtes qui peuvent être nécessaires au gérant de la pizzeria.
Réalisation du site WEB
Le gérant de la pizzeria souhaite utiliser cette base de données pour réaliser quelques tâches de manière automatique :
- création et mise à jour des menus
- évolution des ventes
- évolution des bénéfices réalisés
- notation des recettes par les consommateurs
- …
Pour cela, on se propose de réaliser un petit site WEB, doté d’un formulaire simple (quelques boutons et listes déroulantes), et affichant les résultats de requêtes préalablement définies.
Installation de la base de donné
Après accord du professeur, accéder en SSH à l’un des Raspberry PI.
Voir l’article Raspberry Pi du lycée
La base de donnée est gérée par le SGBD MySQL, (déjà installé sur les Raspberry Pi du lycée), associé à l’application Web phpMyAdmin (voir Raspberry Pi du lycée pour y accéder).
? Télécharger la base de données qui servira d’exemple : pizzeria (à dézipper !)
pizzeria_xxx
, où xxx sont les initiales des membres du groupe), puis y importer les tables à partir du fichier .sql
téléchargé.
Interrogation de la base de données
Pour interroger une base de données MySQL avec python, il faut installer une bibliothèque, comme mysql-connector
par exemple.
pip3 install mysql-connector
Voici un article sur l’utilisation de mysql-connector .
Structure du site Web
pizzeria_xxx
, où xxx sont les initiales des membres du groupe)
Structure des pages
Flask permet de construire des pages dynamiquement : elles sont construites coté serveur, à l’aide du langage Python et Flask (voir : Python Flask).
Voici une structure envisageable :
Le fichier base.html
Un fichier base.html
sert de base à toutes les pages du site.
<!DOCTYPE html> <html lang="fr-FR"> <head> <meta charset="UTF-8" /> <title>{% block title %}{% endblock %}</title> </head> <body> {% include "header.html" %} <div class="interieur"> {% block content %}{%- endblock %} </div> {% include "footer.html" %} </body> </html>
Ce fichier comporte :
- au format HTML, l’entête HTML et les balises
<head>
et<body>
. - dans le corps de la page (
<body>
) on inclue l’entête et le pied de page, enregistrés dans deux fichiersheader.html
etfooter.html
, en utilisant dans le code HTML les instructions Flask (qui utilise le moteur de template Jinja){% include "header.html" %}
et{% include "footer.html" %}
- le titre de la page et son contenu sont inclus grâce aux instructions
{% block title %}{% endblock %}
et{% block content %}{% endblock %}
Entête et pied de page
Ils sont définis dans deux fichiers header.html
et footer.html
Les pages du site
Chaque page (xxx.html
) aura la forme :
{% extends "base.html" %} {% block title %}Titre de la page{% endblock %} {% block content %} ... code HTML ... {% endblock %}
Le fichier principal Python
Ce fichier (appelé ici pizzeria.py
) est exécuté par le serveur (via wsgi) à chaque requête HTTP GET. Il définit l’application Flask (objet qui doit gérer les réponses HTTP), et les routes du sites (les URL qui doivent renvoyer des ressources).
pizzeria.py
sur la structure suivante :# Le Framework (générateur de pages HTML) from flask import Flask, render_template # Application Flask app = Flask(__name__) # Pages HTML pageACCUEIL = "accueil.html" ############################################################################################ @app.route("/") def index(): return render_template(pageACCUEIL) # Script de débuggage if __name__ == "__main__": app.run(host='0.0.0.0', debug = True)
Structure du dossier du site
Au final, le dossier du site aura cette forme :
- pizzeria
- logs
- templates
- base.html
- header.html
- footer.html
- accueil.html
- static
- images …
- css …
- pizzeria.wsgi
- pizzeria.py
table.html
, en utilisant les structures Jinja {% for ... %}...{% endfor %}
, écrire le code permettant de construire un tableau HTML (balise <table>
).Pour utiliser ce bout de code HTML dans un modèle (template), il suffit d’y insérer :
{% with t = ma_table %} {% include "table.html" %} {% endwith %}
page_pizzas.html
, basée sur base.html
, et incluant table.html
, de sorte d’afficher, comme sur un menu, la liste des pizzas, leurs ingrédients (avec une astérisque à côté de chaque ingrédient allergène), leurs prix, et la note moyenne des consommateurs (sous forme d’étoiles ⭐⭐⭐⭐⭐).header.html
) comportant un lien vers page_pizzas.html
(utiliser url_for
, voir documentation de Flask).