Python Avancé : Web et Bases de Données
Python Avancé : Web et Bases de Données
Fabien Duchateau
2024 - 2025
[Link]
Positionnement dans BDW
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 3 / 51
Plan
Imports
Bases de données
Templates Jinja
Gestion des erreurs Imports Bases de données Templates Jinja
Motivation
Style LBYL
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 6 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Style EAFP
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 7 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Imports
Bases de données
Templates Jinja
Gestion des erreurs Imports Bases de données Templates Jinja
Définitions
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 10 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Import de module/package
import module
Aussi des options de renommage du (nom de) module, etc. (voir modules)
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 11 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 12 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
[Link] [Link]
import somme from somme import sommer, x
[Link](somme.x, 2) sommer(x, 2)
Module random :
import random
I Générateur de
nombres aléatoires x = [Link](0, 10)
print(x) # ex, 7
I Sélection de
[Link]([1, 2, 3, 4]) # ex, 2
valeurs aléatoires
dans une séquence
from datetime import datetime
Module datetime :
I Manipulation de d = [Link]() # objet avec la
date/heure courante
date et heure
,→
[Link]() # ex, 2024-09-01
,→ [Link].971564
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 14 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Module os :
import os
I Opérations en lien from os import path
avec le système
d’exploitation chemin = '/tmp'
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 15 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
import re
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 16 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Et beaucoup d’autres...
I shutil, glob, tempfile, request
I math, statistics
I argparse, doctest, unittest, logging
I sqlite3, json, csv, xml
[Link]
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 18 / 51
Plan
Imports
Bases de données
Templates Jinja
Gestion des erreurs Imports Bases de données Templates Jinja
Généralités
[Link]
[Link]
[Link]
[Link]
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 20 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Généralités
[Link]
[Link]
[Link]
[Link]
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 20 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
On peut itérer les étapes 2 à 3 autant de fois que l’on veut avant
de fermer la connexion à l’étape 4
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 21 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Étape de connexion
Informations de connexion :
I Paramètres : serveur hébergeant le SGBD, nom d’utilisatrice,
mot de passe, nom de la base de données et nom du
(répertoire) schéma
I Ces informations sensibles sont généralement stockées dans un
fichier à part (avec des droits restreints)
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 22 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
1 import psycopg
2
3 def get_connexion(host, username, password, db, schema):
4 try:
5 connexion = [Link](host=host, user=username,
,→ password=password, dbname=db, autocommit=True)
6 # on sélectionne le schéma par une requête SET
7 cursor = [Link](connexion)
8 [Link]("SET search_path TO %s", [schema])
9 except Exception as e:
10 print(e)
11 return None
12 return connexion
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 23 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Étape d’exécution
Curseur : objet qui permet d’exécuter une (ou plusieurs) requête et
de récupérer le résultat sous forme d’un objet Python (liste de
tuples ou de dictionnaires)
curseur = [Link]()
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 24 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
1 def get_series(connexion):
2 try:
3 cursor = [Link]()
4 [Link]("SELECT * FROM Actrices")
5 return cursor # liste de tuples
6 except [Link] as e:
7 print(f"Error : {e}")
8 return None
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 25 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
[Link]
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 28 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Les méthodes fetch...() retournent une liste contenant soit des tuples,
soit des dictionnaires (selon cursor.row_factory)
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 30 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 31 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Afin de séparer les différentes parties du code, il est conseillé que les
fonctions d’accès aux données retournent une liste Python (avec fetchall()).
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 32 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Requêtes préparées
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 33 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 34 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Étape de déconnexion
def disconnect(connection):
[Link]()
return True
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 35 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
En résumé
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 36 / 51
Plan
Imports
Bases de données
Templates Jinja
Gestion des erreurs Imports Bases de données Templates Jinja
Les templates
[Link]
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 38 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Moteur de templates
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 39 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Package Jinja
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 40 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Syntaxe générale
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 41 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Substitution de variables
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 42 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Filtres
Jinja fournit un certain nombre de filtres
I Symbole | pour appliquer un filtre à une variable
Test conditionnel
1 {% if a_gagne %}
2 <span class="success">Bravo !</span>
3 {% else %}
4 <span class="info">Prochain tour.</span>
5 {% endif %}
Boucle
1 <ul> <ul>
2 {% for valeur in ma_liste %} <li>1</li>
3 <li>{{ valeur }}</li> <li>2</li>
4 {% endfor %} <li>3</li>
5 </ul> <li>4</li>
<li>5</li>
Template avec boucle pour construire </ul>
une liste non ordonnée (<ul>) dont les
éléments (<li>) proviennent d’une liste Code HTML généré
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 45 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Boucle (2)
mon_dict = {'BDW': 'Base de données et programmation web',
'BDA': 'Base de données avancées'}
1 <dl> <dl>
2 {% for cle, val in mon_dict %} <dt>BDW</dt>
3 <dt>{{ cle }}</dt> <dd>Base de données et
4 <dd>{{ val }}</dd> ,→ programmation web</dd>
5 {% endfor %} <dt>BDA</dt>
6 </dl> <dd>Base de données
,→ avancées</dd>
Template avec boucle pour </dl>
construire une liste de description
Code HTML généré
(<dl>) dont le contenu (<dt> et
<dd>) provient d’un dictionnaire
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 46 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Includes
[Link] [Link]
1 {% include '[Link]' %} <header>
2 <main> <img src="[Link]">
3 <h1>Ma page</h1> <h1>Nom du site</h1>
4 <p>blah blah</p> </header>
5 </main>
6 {% include '[Link]' %} Fichier contenant le code
Template principal qui inclut l’entête du <header>
et le pied de page
Utilisé pour factoriser les parties statiques d’un site (code identique
quelle que soit la page, e.g., entête, pied de page)
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 47 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Héritage
[Link]
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 48 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
Héritage (2)
[Link] [Link]
1 <!doctype html> {% extends "[Link]" %}
2 <html> héritage
3 <head> {% block main %}
4 <meta charset="utf-8" /> <h2>Affichage</h2>
5 <link type="text/css" <table>
u
ten
,→ href="[Link]"> ...
con
6 <title>Mon super site</title> </table>
u
7 </head> {% endblock %}
nd
itio
8
Template enfant afficher
éfin
9 <body>
red
10 {% include '[Link]' %}
11 <main> [Link]
12 {% block main %}{% endblock %} ide {% extends "[Link]" %}
m
13 </main>
14 {% include '[Link]' %} {% block main %}
15 </body> <h2>Ajout</h2>
16 </html> <form>
...
Template de base, avec un bloc nom- </form>
{% endblock %}
mé main vide et qui sera redéfini par
les templates enfants Template enfant ajouter
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 49 / 51
Gestion des erreurs Imports Bases de données Templates Jinja
En résumé
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 50 / 51
Bilan
Prochain cours :
structuration d’un site web
avec l’architecture MVC
BDW - Base de données et programmation web // Programmation web - Python avancé UCBL Lyon 1 51 / 51