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).

DB Browser for SQLite

Site : http://sqlitebrowser.org/

DB Browser pour SQLite est un outil visuel et open source de haute qualité pour créer, concevoir et éditer des fichiers de base de données compatibles avec SQLite.

Il est destiné aux utilisateurs et aux développeurs souhaitant créer des bases de données, rechercher et modifier des données. Il utilise une interface similaire à une feuille de calcul et vous n’avez pas besoin d’apprendre des commandes SQL compliquées.

Les contrôles et les assistants sont disponibles pour les utilisateurs :

  • Créer et compacter des fichiers de base de données
  • Créer, définir, modifier et supprimer des tables
  • Créer, définir et supprimer des index
  • Parcourir, modifier, ajouter et supprimer des enregistrements
  • Rechercher des enregistrements
  • Importer et exporter des enregistrements sous forme de texte
  • Importer et exporter des tables depuis / vers des fichiers CSV
  • Importer et exporter des bases de données à partir de / vers des fichiers de vidage SQL
  • Émettre des requêtes SQL et inspecter les résultats
  • Examiner un journal de toutes les commandes SQL émises par l’application

 

Installation Windows / Mac OS

? Télécharger l’application adaptée directement depuis le site de DB Browser pour SQLite

Remarque : il existe pour Windows une version portable permettant à des utilisateurs ne possédant pas les privilèges administrateur d’utiliser DB Browser pour SQLite.

 

Installation Linux

sudo apt-get install sqlitebrowser

 

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

Représenter ce schéma sous forme graphique.
Identifier les différentes clés (primaires et étrangères) de ce schéma.
Définir les domaines de chacun des attributs des relations de la base (TEXT, INT, FLOAT, BOOL, DATE).

 

Création des tables

A l’aide du logiciel DB Browser for SQLite :
Créer la structure de la base de données (tables, attributs, contraintes).
Remplir la base de données avec quelques enregistrements pour chaque relation.
Vérifier que les contraintes d’intégrité fonctionnent.

É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.

Faire le Quiz ci-dessous, en notant bien chacune des réponses !
Aide

La fonction SQL  MONTH(date)  permet d’extraire le mois depuis une date.

Toutes les fonctions SQL de base sont documentées ici : https://sql.sh/fonctions

 

 

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

Si besoin, installer un serveur WEB interfacé avec Python (déjà installé sur les 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 !)

 

À l’aide de phpMyAdmin (sur le Raspberry Pi), créer une nouvelle base (nommée 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 .

 

Écrire et tester une fonction Python permettant de se connecter à la base de données pizzeria  et d’obtenir le résultat d’une requête SQL SELECT.
Faire de même avec des requêtes d’écriture (UPDATE, INSERT).

 

Structure du site Web

Le site Web est constitué d’un ensemble de fichiers placés dans un dossier spécifique du Raspberry Pi.
Construire le dossier du site (voir https://info.blaisepascal.fr/rpi-installer-un-serveur-web#Construire_le_dossier_du_site) (nommé 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 fichiers header.html  et footer.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).

Créer un fichier script 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

 

 

 

Dans un fichier 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 %}

 

Créer alors une page 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 ⭐⭐⭐⭐⭐).
Faire un menu dans l’entête des pages (header.html) comportant un lien vers page_pizzas.html (utiliser url_for, voir documentation de Flask).

 

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *